- Look for good invariants to exploit
- Attempt to balance your work as much as possible
- Do not repeat work (store, and re-use!)
- Use appropriate data representations
- Try well-known problem solving strategies
- Sometimes greed is good
- Binary Search
- Sorting
- Shortest Paths and Connectivity
- Minimum Spanning Tree Algorithms
- Divide and Conquer strategy
- Merge Sort
- Quick Sort
- Hirschberg's Algorithm
- Certain data representations can be more efficient for certain problems
- Priority Queue in Dijkstra's algorithm
- Union-Find data structure in Kruskal's algorithm
- Efficient Search and Data Retrieval
- Do not compute anything more than once
- Use Dynamic Programming
- Edit Distance
- Largest Common Subsequence Problem
- Dijkstra's Algorithm
- Dijkstra's Algorithm
- Prim's Algorithm
- Kruskal's Algorithm
- Green can give a good solution, even if not guaranteed optimal