1,貪婪演算法:一步步走,每走一步都是當前最優的。
使用要求:無後向性,比如n個活動安排,只要安排了某個活動,那麼後面活動怎麼安排和前面的選擇無關。
注:每一步都是選最棒的,那麼這個最棒是怎麼定義的?(什麼標準)---看下面這個例子
貪心法標準的選擇
設有n個正整數,將它們連線成一排,組成乙個最大的多位整數。
例如:n=3時,3個整數13,312,343,連成的最大整數為34331213。
又如:n=4時,4個整數7,13,4,246,連成的最大整數為7424613。
輸入:n個數
輸出:連成的多位數
演算法分析:此題很容易想到使用貪心法,在考試時有很多同學把整數按從大到小的順序連線起來,測試題目的例子也都符合,但最後測試的結果卻不全對。按這種標 準,我們很容易找到反例:12,121應該組成12121而非12112,那麼是不是相互包含的時候就從小到大呢?也不一定,如12,123就是 12312而非12123,這種情況就有很多種了。是不是此題不能用貪心法呢?其實此題可以用貪心法來求解,只是剛才的標準不對,正確的標準是:先把整數轉換成字串,然後在比較a+b和b+a,如果a+b>=b+a,就把a排在b的前面,反之則把a排在b的後面。
2,分治法:將大問題分解為小問題,通過遞迴得到大問題的解(黃色是為了和下面對應)然後解決小問題,再將小問題的解合併成大問題的解。
3,動態規劃:將大問題的最優解,分解為子問題的最優解,通過遞迴得到大問題最優解。
分治 動態規劃 貪婪 之 演算法分析
分治與動態規劃都用到了遞迴的思想,但是對他們之間的區別在概念上一直比較模糊,今天附帶貪婪選擇稍微整理一下他們。演算法之道上說,標準分治 動態規劃 貪婪選擇稱得上是孫子兵法的下 中 上策。標準分治 雖然將大問題分解成小問題,但是每個小問題都需要解決,相當於逢城必攻實屬下策 動態規劃 則聰明地發現,很多...
理解動態規劃 分治法和貪心法
動態規劃 分治法和貪心法都是利用求解子問題,而後利用子問題求解更上層問題,最終獲得全域性解決方案的方法。但是三者的應用場景和性質卻存在著極大的不同 1.分治法 很容易與動態規劃問題混淆,但兩者卻有著本質上的差異。分治法採用的是遞迴的思想來求解問題,兩個分解的子問題獨立求解,其之間無任何的重疊。而上一...
動態規劃 分治 貪心 遞迴
一言以蔽之 dp 和分治 之間的區別就在於是否有重疊子問題 如果有那就應該dp 否則就應該分治。當然如果可以每一步都產生最優解那麼就不必dp了,貪心演算法就可以了.而遞迴只是一種實現演算法的方法.例子 下面分別用 dp,dc 分治法 貪心來做 leetcode 514.自由之路 golang 如下 ...