Algorithms Theory
Sorting Algorithms
Comparison-Based Sorting
- Bubble sort
- Selection sort
- Insertion sort
- Merge sort
- Quick sort
- Heap sort
- Time and space complexity analysis
- Stability of sorting algorithms
Non-Comparison Sorting
- Counting sort
- Radix sort
- Bucket sort
- When to use non-comparison sorts
Searching Algorithms
Linear Search
- Sequential search
- Time complexity: O(n)
- When to use
Binary Search
- Binary search algorithm
- Requirements (sorted array)
- Time complexity: O(log n)
- Variations (finding first/last occurrence)
- Binary search on answer
Graph Algorithms
Shortest Path Algorithms
- Dijkstra's algorithm
- Bellman-Ford algorithm
- Floyd-Warshall algorithm
- A* algorithm
Minimum Spanning Tree
- Kruskal's algorithm
- Prim's algorithm
- Applications
Other Graph Algorithms
- Topological sort
- Strongly connected components
- Network flow algorithms
Dynamic Programming Intro
Concepts
- Overlapping subproblems
- Optimal substructure
- Memoization vs tabulation
- Top-down vs bottom-up approaches
Common Patterns
- 1D DP problems
- 2D DP problems
- State machine DP
- DP on trees
- DP on strings
Classic Problems
- Fibonacci sequence
- Longest common subsequence
- Knapsack problem
- Coin change problem
- Edit distance
Practice Questions
Test your understanding with the questions in the interactive quiz below (when available).
Resources
- "Algorithm Design Manual" by Steven Skiena
- "Algorithms" by Sedgewick and Wayne
- Algorithm Visualization: https://algorithm-visualizer.org/
- LeetCode Dynamic Programming: https://leetcode.com/tag/dynamic-programming/