- Divide the problems into sub problems
- Conquer sub problems recursively
- Combine solutions
It is an algorithm design technique.
- Find x in sorted array
- Only have one sub problem
- Bottom up algorithm: Compute F0, F1, …Fn O(n)
- Recursive squaring
- Matrix squaring O(lgn)
Exponential time is bad, Polynomial time is good
- Naive implementation: O(n^3), 8 times matrix multiplication
- Strassen algorithm: O(n^2.81), 7 times matrix multiplication