Useful Links
Computer Science
Algorithms and Data Structures
Algorithm Design and Analysis
1. Introduction to Algorithms
2. Algorithm Analysis
3. Brute-Force and Exhaustive Search
4. Divide and Conquer
5. Greedy Algorithms
6. Dynamic Programming
7. Backtracking and Branch-and-Bound
8. Graph Algorithms
9. String Matching Algorithms
10. Computational Complexity Theory
11. Advanced Topics in Algorithm Design
Dynamic Programming
The Dynamic Programming Paradigm
Overlapping Subproblems
Optimal Substructure
Comparison with Divide and Conquer
When to Use Dynamic Programming
Approaches to Dynamic Programming
Memoization
Top-Down Approach
Recursive Implementation
Caching Results
Implementation Techniques
Tabulation
Bottom-Up Approach
Iterative Table Filling
Space Optimization Techniques
Order of Computation
Classic Dynamic Programming Problems
Fibonacci Numbers
Naive Recursive Solution
Memoized Solution
Tabulated Solution
Space-Optimized Solution
0/1 Knapsack Problem
Problem Formulation
Recursive Formulation
Table Construction
Backtracking Solution
Space Optimization
Longest Common Subsequence
Problem Statement
Recursive Formulation
Table Construction
Reconstructing the Solution
Space Optimization
Longest Increasing Subsequence
Problem Statement
Dynamic Programming Solution
Binary Search Optimization
Edit Distance
Problem Statement
Recursive Formulation
Table Construction
Matrix-Chain Multiplication
Problem Statement
Parenthesization
Recursive Formulation
Cost Table Construction
Optimal Parenthesization
Coin Change Problem
Minimum Coins
Number of Ways
Table Construction
All-Pairs Shortest Paths
Floyd-Warshall Algorithm
Algorithm Steps
Handling Negative Cycles
Path Reconstruction
Previous
5. Greedy Algorithms
Go to top
Next
7. Backtracking and Branch-and-Bound