
1. Optimization Goal
1.1. Approximation Algorithms
1.2. Heuristics
2. Design Paradigm
2.1. Divide-and-Conquer
2.1.1. Strassen's Algorithm
2.1.2. Quick Sort
2.1.3. Binary Search
2.1.4. Closest Pair of Points
2.1.5. Merge Sort
2.2. Greedy Algorithms
2.2.1. Huffman Coding
2.2.2. Dijkstra's Algorithm
2.2.3. Kruskal's Algorithm
2.2.4. Job Scheduling
2.2.5. Prim's Algorithm
2.3. Dynamic Programming
2.3.1. Matrix Chain Multiplication
2.3.2. Knapsack Problem
2.3.3. Fibonacci Sequence
2.3.4. Shortest Path in a Graph
2.3.5. Longest Common Subsequence
2.4. Backtracking
2.4.1. N-Queens Problem
2.4.2. Graph Coloring
2.4.3. Hamiltonian Cycle
2.4.4. Subset Sum Problem
2.4.5. Sudoku Solver
3. Problem Type
3.1. Bubble Sort
3.1.1. Selection Sort
3.1.2. Insertion Sort
3.1.3. Merge Sort
3.1.4. Quick Sort
3.1.5. Heap Sort
3.1.6. Counting Sort
3.1.7. Radix Sort
3.1.8. Bucket Sort
3.2. Searching Algorithms
3.2.1. Linear Search
3.2.2. Binary Search
3.2.3. Jump Search
3.2.4. Interpolation Search
3.2.5. Exponential Search
3.3. Graph Algorithms
3.3.1. Depth-First Search (DFS)
3.3.2. Breadth-First Search (BFS)
3.3.3. Dijkstra's Algorithm
3.3.4. Bellman-Ford Algorithm
3.3.5. Floyd-Warshall Algorithm
3.3.6. Prim's Algorithm
3.3.7. Kruskal's Algorithm
3.4. String Matching Algorithms
3.4.1. Brute-Force String Matching
3.4.2. Knuth-Morris-Pratt Algorithm
3.4.3. Rabin-Karp Algorithm
3.4.4. Boyer-Moore Algorithm