Introduction
For every algorithm, it is important to understand the following:
- What problem does this algorithm solve?
- When can this algorithm be applied? (That is, what are the preconditions? When does the algorithm fail?)
- Why does the algorithm give the correct answer?
- What is the key invariant behind this algorithm?
- What is the running time of the algorithm? Are there any optimisations possible?