** Algorithms**

An * algorithm* is a program to solve a specific
kind of problem.

- Is there an algorithm to solve a certain class of problems?
- Does an algorithm work? (Always? Most of the time?
Under certain conditions? Only if we are lucky?)
- How long does it take to find the answer? (Average? Worst case?)
- How much memory does it take?
- How does the difficulty of the problem (time and memory required)
depend on the size of the problem?
- What is the inherent difficulty of problems? How difficult are problems of a given class? Is a known algorithm the best one possible?