Designing correct, efficient, and implementable algorithms for real-world problems requires access to two distinct boddies of knowledge, Techniques and Resouces
- Techniques
- Good algorithm designers understand several fundamentamental algorithm design techniques:
- Data Structures
- Dynamic Programming
- Depth-first search
- Backtracking
- Heuristics
- Single most important design technique - modeling
- art of abstraction is a messy real-world application into a clean problem suitable for algorithmic attack
- Good algorithm designers understand several fundamentamental algorithm design techniques:
- Resources
- Stand on the shoulders of giants
- rather than laboring from scratch, can figure out what is known about a particular problem
- rather than re-implementing popular algorithms from scratch, seek existing implementations to serve as starting point
- Familiar with many classic algorithmic problems, which provide sufficient source material to model most any application