- Asymptotic analysis: Understanding the running time of algorithms and their growth rates as the input size increases.
- Divide and conquer: Using recursion and subproblem decomposition to solve complex problems.
- Sorting and searching: Understanding the efficiency and implementation of various sorting and searching algorithms, such as quicksort, mergesort, binary search, and more.
- Graph algorithms: Applying algorithms to graphs, including traversal, shortest paths, and minimum spanning trees.
- Dynamic programming: Solving optimization problems by breaking them down into smaller subproblems and using memoization to avoid redundant computations.
- Greedy algorithms: Making locally optimal choices in hopes of achieving a global optimum.