Dynamic Programming 動態規劃視覺化

費波那契數列

遞迴 O(2^n) vs DP O(n) - 看 DP 如何避免重複計算

計算 fib( )

遞迴(重複計算)

計算次數: 0
時間複雜度: O(2^n)

DP(記住結果)

計算次數: 0
時間複雜度: O(n)
DP 表格:
結果: -
// dp[i] = dp[i-1] + dp[i-2]

最長共同子序列 (LCS)

找兩個字串中最長的共同子序列

字串1: 字串2:
DP 表格:
LCS: - 長度: -
// 如果字元相同: dp[i][j] = dp[i-1][j-1] + 1
// 如果不同: dp[i][j] = max(dp[i-1][j], dp[i][j-1])

硬幣找零

用最少的硬幣組成目標金額

硬幣: 金額:
DP 表格 (最少硬幣數):
結果: -
// dp[i] = min(dp[i], dp[i - coin] + 1)