作為科班畢業的程式設計師,在下的**能力感覺都是笑話。痛定思痛,決定啃一啃演算法。發現好像都是大學的課本知識,摸摸頭…尷尬。
當然不能一口吃乙個胖子,這些僅作為入門學習
迭代法、貪婪法、窮舉法搜尋法、遞推法、遞迴法、回溯法、分治法、動態規劃法。
這種方法模式一般將求解過程分成若干個步驟,但每個步驟都最貪心,選擇當前狀態下收益最大,區域性最有利的選擇,並以此認定最後的結果也是最好的(最大的)
貪婪法和動彈規劃以及分治法一樣,都需要對問題進行分解,定義最優解的子結構。
與其他方法不同之處在於,每一步選擇完區域性最優解就確定了,不再進行回溯了,也就是說,每個步驟確定後就不再修改了,直到演算法結束。
但也因此很少情況下能得到最優解。
下面就是案例啦!累死我了
【問題描述】:有乙個揹包,最多能承載重量為 c=150 的物品,現在有 7 個物品(物品不能分割成任意大小),編號為 1~7,重量分別是 wi=[35、30、60、50、40、10、25],價值分別是 pi=[10、40、30、50、35、40、30],現在從這 7 個物品中選擇乙個或多個裝入揹包,要求在物品總重量不超過 c 的前提下,所裝入的物品總價值最高。
常見的三種貪婪策略
1.根據物品價值選擇,每次都選價值最高的物品
依次裝入4,2,6,5,總重量是130,價值是165
2.根據物品重量選擇最輕的物品,直到超過150
一次裝入6,7,2,1,5,總重量140,總價值155
3.定義乙個價值密度感念,si=物品價值pi/物品重量wi
依次裝入6,2,7,4,1,總重量150,價值170
三個方法都是正確的,但是第三種很明顯模型設計的更好,所以效果很明顯。
程式設計大賽的戰旗遊戲,貪心演算法很明顯被狠虐。實在是模型不太會設計。同樣的模式老員工的建模會將各種欠款都考慮進去。所以,對戰時候就像乙個帶眼睛一樣。說多都是累啊,真累!!!
演算法之貪婪演算法
雖然設計乙個好的求解演算法更像是一門藝術,而不像是技術,但仍然存在一些行之有效的能夠用於解決許多問題的演算法設計方法,你可以使用這些方法來設計演算法,並觀察這些演算法是如何工作的。一般情況下,為了獲得較好的效能,必須對演算法進行細緻的調整。但是在某些情況下,演算法經過調整之後效能仍無法達到要求,這時...
貪婪演算法GreedyAlgorithm
尋找最優解。從當前狀態出發,根據區域性狀態 而非全域性的最優決策 進行 選擇 在滿足約束條件的前提下,使目標函式的增速達到極值,選擇乙個能夠最快達到要求的輸入元素。根據一系列選擇得到的解,每一次選擇都是那時狀態的最佳解。事實上,最後得到的將不是全域性的最優解。貪婪選擇 每次選擇將會簡化為子問題,而且...
python 貪婪演算法
貪婪演算法 覆蓋問題,有個節目想要將自己的節目通過電台發布到幾個州,這些電台可能互相有所覆蓋,即覆蓋了相同的州,現在如何能找到幾個電台,最優的覆蓋這些州。想要電台覆蓋的州 states needed set mt wa or id nv ut ca az 每個電台覆蓋的範圍 stations sta...