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

2021-09-26 16:28:19 字數 770 閱讀 9993

以下摘自《演算法筆記》

在區別它們之前我們先明確兩個概念:

1.什麼是重疊子問題?

如果乙個問題可以被分解為若干子問題,並且這些子問題會重複出現,那麼就稱這個問題為重疊子問題。

2.什麼是最優子結構?

如果乙個問題的最優解可以由其他子問題的最優解有效的構造出來,那麼這個問題擁有最優子問題。

動態規劃與分治的區別:

分治和動態規劃都是將問題分解為子問題,然後合併子問題的解得到原問題的解。但是不同的是,分治法分解出的子問題是不重疊的,因此分治法解決的問題不擁有重疊子問題,而動態規劃解決的問題具有擁有重疊子問題。

貪心與動態規劃:

貪心和動態規劃都要求原問題必須擁有最優子結構。二者的區別在於 ,貪心法採用的計算方式類似於「自頂向下」,但是並不等待子問題求解完畢後再選擇使用哪乙個,而是通過一種策略直接選擇乙個子問題去求解,沒被選擇的子問題就不去求解了,直接拋棄。也就是說它只在上一步選擇的基礎上繼續選擇,因此整個過程以一種單鏈的流水方式進行,顯然這種所謂「最優選擇」的正確性需要用歸納法證明。而動態規劃不管是採用自底向上還是自頂向下的計算方式,都是從邊界開始向上得到目標問題的解。也就是說,它總是考慮所有的子問題,並選擇繼承能得到最優結果的那個,對暫時沒有繼承的子問題,由於重疊子問題的存在,後期可能再次考慮它們,一次還有機會成為全域性最優的一部分,不需要放棄。

由此可以看出貪心是一種壯士斷腕的決策,只要進行了選擇就不後悔;動態規劃則是要看哪個選擇笑到了最後,暫時的領先說明不了什麼。

分治 遞迴 動態規劃 貪心演算法區別

三者之間沒有根本區別,關鍵看有無最優的子結構。共性 找到重複子問題 差異性 動態規劃尋找最優子結構,中間可以淘汰次優解 動態規劃是尋找區域性,全域性最優解 貪心演算法是找區域性最優解,不一定得到全域性最優解 回顧下遞迴四步驟 terminator process drill dowm restore...

遞迴,分治演算法,動態規劃和貪心選擇的區別

一般實際生活中我們遇到的演算法分為四類 一 判定性問題 二 最優化問題 三 構造性問題 四 計算性問題 而今天所要總結的演算法就是著重解決 最優化問題 演算法之道 對三種演算法進行了歸納總結,如下表所示 標準分治 動態規劃 貪心演算法 適用型別 通用問題 優化問題 優化問題 子問題結構 每個子問題不...

動態規劃 分治 貪心 遞迴

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