Often there are different algorithms solving the same problem.
These can come with **very** different complexity ratings.
## typical tasks
For certain tasks (e.g. sorting, neighbors, averaging, or really anything...), think about what complexity class is expected.
If your program behaves differently, **change it** or **seek advice** from colleagues.
# Complexity in software design
## interdependence of components
possibly also amount of coordination and communication needed
## ways to counteract
- Abstraction
- Encapsulation
## Maintainability
_Also focus on maintainability. This lecture might or might not be the right place, but it should be useful somewhere_
# Resources
## Computational Complexity
- "Models of Computation: Exploring the Power of Computing"_ by _John Savage_, available [here](https://cs.brown.edu/people/jsavage/). Also covers some parts of computational complexity.
- Textbooks from [lecture from Stanford](https://theory.stanford.edu/~liyang/teaching/complexity.html)
## Complexity in Software Design
- "Clean Code" by _Robert Martin_ [BIS-Erdsystem](https://kataloge.hh.gbv.de/DB=1.20/XMLPRS=N/PPN?PPN=1680459244)