# Phase 6: Algorithmic Paradigms

This phase focuses on the core strategic approaches used to solve complex algorithmic problems. Understanding these paradigms allows you to tackle a wide variety of challenges by applying generalized problem-solving frameworks.

## Topics Covered

1.  **Divide and Conquer**
    *   Breaking a problem into smaller subproblems, solving them recursively, and combining the results.
    *   *Examples:* Merge Sort, Quick Sort, Binary Search.

2.  **Greedy Algorithms**
    *   Making the locally optimal choice at each step with the hope of finding a global optimum.
    *   *Examples:* Fractional Knapsack, Huffman Coding, Dijkstra's (Greedy choice).

3.  **Backtracking**
    *   Exploring all possible solutions by building them incrementally and removing those that fail to satisfy constraints.
    *   *Examples:* N-Queens, Sudoku Solver, Permutations.

4.  **Dynamic Programming (DP)**
    *   Solving complex problems by breaking them down into simpler subproblems and storing the results (Memoization vs. Tabulation) to avoid redundant work.
    *   *Examples:* Fibonacci, Longest Increasing Subsequence (LIS), 0/1 Knapsack.

## Learning Objectives
*   Identify which paradigm is best suited for a given problem.
*   Master the transition from recursion to dynamic programming.
*   Understand the trade-offs between Greedy and DP approaches.
