經典演算法之動態規劃 分治 和貪心

2021-09-20 10:18:29 字數 595 閱讀 4865

1、分治

分治(即分而治之),把乙個複雜的問題分成多個相同或相似的子問題,再把子問題分成更小的子問題……直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。

適用場景:二分搜尋、歸併排序、快速排序、大整數乘法、第k小元素、最近點對、快速傅利葉變換等。

2、動態規劃

動態規劃法也是把問題一層一層地分解為規模逐漸減小的同型別的子問題。動態規劃通常用來求最優化問題。此類問題可以有很多可行解,我們求出的是乙個最優解,可能存在多個最優解。(最優子結構、公共子問題

使用場景:矩陣連乘、鋼條切割、最長公共子串行、最優二叉搜尋樹、流水作業排程、0/1揹包問題等。

3、貪心

通過區域性最優選擇達到全域性最優選擇。貪心演算法不一定總產生最優解,貪心演算法是否產生優化解,需嚴格證明貪心演算法產生最優解的條件:(最優子結構、貪心選擇性)

貪心選擇性:當乙個問題的全域性最優解可以通過區域性最優解得到,稱這個問題具有貪心選擇性。

適用場景:活動選擇問題、哈夫曼編碼問題、最小生成樹問題、單源最短路徑問題等。

未完。。

動態規劃 分治 貪心 遞迴

一言以蔽之 dp 和分治 之間的區別就在於是否有重疊子問題 如果有那就應該dp 否則就應該分治。當然如果可以每一步都產生最優解那麼就不必dp了,貪心演算法就可以了.而遞迴只是一種實現演算法的方法.例子 下面分別用 dp,dc 分治法 貪心來做 leetcode 514.自由之路 golang 如下 ...

理解動態規劃 分治法和貪心法

動態規劃 分治法和貪心法都是利用求解子問題,而後利用子問題求解更上層問題,最終獲得全域性解決方案的方法。但是三者的應用場景和性質卻存在著極大的不同 1.分治法 很容易與動態規劃問題混淆,但兩者卻有著本質上的差異。分治法採用的是遞迴的思想來求解問題,兩個分解的子問題獨立求解,其之間無任何的重疊。而上一...

動態規劃,貪心,分治演算法的區別

以下摘自 演算法筆記 在區別它們之前我們先明確兩個概念 1.什麼是重疊子問題?如果乙個問題可以被分解為若干子問題,並且這些子問題會重複出現,那麼就稱這個問題為重疊子問題。2.什麼是最優子結構?如果乙個問題的最優解可以由其他子問題的最優解有效的構造出來,那麼這個問題擁有最優子問題。動態規劃與分治的區別...