In this chapter, you learned the following:
The most effective way to design algorithms is to use top-down design, in which goals are broken down into subgoals until the steps are small enough to be translated directly into a programming language.
Almost all problems have more than one correct solution. Choosing between them often involves a trade-off between simplicity and performance.
The performance of a program can be characterized by how much time it uses. The elapsed time can be determined experimentally by benchmarking its execution. One way to profile time is to use the function perf_counter from the time module.