概念: 當一個問題具有最優子結構性質時,可用動態規划算法,有時會有更簡單有效的算法,那就是貪心算法,貪心算法是通過一系列的選擇來得到問題的解,貪心算法並不從整體最優上加以考慮,所做的選擇只是在某種意義上的局部最優解。但對范圍相當廣的許多問題能產生整體最優解。在一些情況下,即使貪心算法不能得到整體 ...
最長公共子序列 最長公共子串 最長公共子序列 Longest Common Subsequence,LCS dp i j :dp i j 表示長度分別為i和j的序列X和序列Y構成的LCS的長度dp i j ,如果i 或 j dp i j dp i j ,如果 X i Y i dp i j max dp i j , dp i j ,如果 X i Y i LCS長度為 dp Xlen Ylen Vi ...
2012-11-15 15:37 3 5069 推薦指數:
概念: 當一個問題具有最優子結構性質時,可用動態規划算法,有時會有更簡單有效的算法,那就是貪心算法,貪心算法是通過一系列的選擇來得到問題的解,貪心算法並不從整體最優上加以考慮,所做的選擇只是在某種意義上的局部最優解。但對范圍相當廣的許多問題能產生整體最優解。在一些情況下,即使貪心算法不能得到整體 ...
終於來到了算法設計思想中最有趣的這部分,在去年的google筆試中,7道算法設計題有2道動態規划(Dynamic Programming)。看了這么久的算法,這部分也是唯一感覺到了比較難的地方,從這篇文章開始,將花連續的篇幅來討論一些對動態規划的認識和其中的問題。這包括一些例子:計算二項式 ...
關於矩形覆蓋面試題 之前已經在上一篇分治法面試題(一):矩形覆蓋一文中給出了該問題的遞歸解法。但是上面的分析可以看出效率不高,主要是存在大量重復元素的計算。那么如何避免大量重復元素的計算呢?這里將給出幾種解決方案。 關於動態規划 動態規划的思想與我們上篇探討的分治法相似,也是通過組合 ...
某幢大樓有100層。你手里有兩顆一模一樣的玻璃珠。當你拿着玻璃珠在某一層往下扔的時候,一定會有兩個結果,玻璃珠碎了或者沒碎。這幢大樓有個臨界樓層。低於它的樓層,往下扔玻璃珠,玻璃珠不會碎,等於或高於它 ...
一、簡單基礎dp 這類dp主要是一些狀態比較容易表示,轉移方程比較好想,問題比較基本常見的。主要包括遞推、背包、LIS(最長遞增序列),LCS(最長公共子序列),下面針對這幾種類型,推薦一下比較好的 ...
1、設計狀態變量 對於狀態變量的設計可以采取一維狀態變量dp[i]和二維狀態變量dp[i][0],dp[i][1]。 一維狀態變量需要考慮后效性問題。二維狀態變量相對於一維狀態變量通過增加維度來消 ...
一、概述 1.設計思想 動態規划法將待求解問題分解成若干個相互重疊的子問題,每個子問題對應決策過程的一個階段,通過組合子問題而解決整個問題的解。 2.基本要素 (1)最優子結構 最優性原理體現為問題的最優子結構特性。當一個問題的最優解中包含了子問題的最優解時,則稱該問題具有最優子結構特性 ...
區間 DP是指在一段區間上進行的一系列動態規划。 對於區間 DP 這一類問題,我們需要計算區間 [1,n] 的答案,通常用一個二維數組 dp 表示,其中 dp[x][y] 表示區間 [x,y]。 有些題目,dp[l][r] 由 dp[l][r−1] 與 dp[l+1][r] 推得;也有些題目 ...