This chapter presents a number of different algorithmic patterns. Each pattern addresses a category of problems and describes a core solution strategy for that category. Given a problem to be solved, we may find that there are several possible solution strategies. We may also find that only one strategy applies or even that none of them do. A good programmer is one who is proficient at examining the problem to be solved and identifying the appropriate algorithmic technique to use. The following algorithmic patterns are discussed in this chapter:

**direct solution strategies**- Brute force algorithms and greedy algorithms.
**backtracking strategies**- Simple backtracking and branch-and-bound algorithms.
**top-down solution strategies**- Divide-and-conquer algorithms.
**bottom-up solution strategies**- Dynamic programming.
**randomized strategies**-
Monte Carlo algorithms and simulated annealing.

- Brute-Force and Greedy Algorithms
- Backtracking Algorithms
- Top-Down Algorithms: Divide-and-Conquer
- Bottom-Up Algorithms: Dynamic

Programming - Randomized Algorithms
- Exercises
- Projects

Copyright © 1998 by Bruno R. Preiss, P.Eng. All rights reserved.