Algorithm design techniques including divide-and-conquer, greedy methods, dynamic programming, backtracking, and NP-completeness.