據重疊子問題this定義,Kadane的算法(f[i] = max(f[i - 1] + a[i], a[i])
)的遞歸製劑不表現出這種特性。每個子問題只能在幼稚的遞歸實現中計算一次。
它不會根據其定義here但是表現出最優子:我們使用的解決方案,以更小的子問題,以便找到解決我們給定的問題(f[i]
使用f[i - 1]
)。
考慮動態規劃定義here:
在數學,計算機科學,經濟學,動態規劃是通過將它們分解成更簡單的子問題解決複雜問題的方法。它適用於展現重疊子問題1和最優子結構(下面描述)的性質的問題。在適用的情況下,該方法比沒有利用子問題重疊的樸素方法(如深度優先搜索)花費的時間少得多。
動態規劃背後的想法很簡單。一般來說,要解決一個給定的問題,我們需要解決問題的不同部分(子問題),然後結合子問題的解決方案來達到一個整體解決方案。通常當使用更天真的方法時,許多子問題都會生成並解決許多次。動態規劃方法尋求解決每個子問題只有一次,從而減少計算
這留下解釋的餘地,以Kadane的算法是否能夠被認爲是DP算法的數字:它打破解決問題它變成了更容易的子問題,但其核心遞歸方法不會產生重疊的子問題,這就是DP要有效處理的問題 - 所以這會使其不屬於DP的專業。另一方面,你可以說基本的遞歸方法不需要導致重疊的子問題,但是這會使得任何遞歸算法成爲DP算法,這會給DP在我的範圍上太寬泛意見。然而,我並沒有意識到文學中的任何東西肯定會解決這個問題,所以我不會以任何方式標記學生或對書籍或文章置之不理。
所以我會說這不是一個DP算法,只是一個貪婪和/或遞歸的,取決於實現。由於上面列出的原因,我會從算法的角度將其標記爲貪婪,但客觀上我會考慮其他解釋同樣有效。
Kadane的算法很貪心,IIRC。 – nhahtdh 2013-05-01 18:25:40
+1,我一直在努力。我無法確定它是否被視爲DP:我們有最佳的子結構,但沒有重疊的子問題。我已經看到它被標記爲DP,但嚴格來說,我會說它不是。 – IVlad 2013-05-01 18:26:45
無法找到某人具有和我一樣的問題;) – 2015-10-17 03:03:55