尋找最優解。從當前狀態出發,根據區域性狀態(而非全域性的最優決策)進行「選擇」,在滿足約束條件的前提下,使目標函式的增速達到極值,選擇乙個能夠最快達到要求的輸入元素。根據一系列選擇得到的解,每一次選擇都是那時狀態的最佳解。事實上,最後得到的將不是全域性的最優解。
貪婪選擇:
每次選擇將會簡化為子問題,而且問題最終的方案僅依賴於每次選擇而不是將來的選擇。
最優子結構:
當乙個問題的最優解包含其子問題的最優解時,稱其具有最優子結構。
1.建立數學描述,用方程寫出約束條件。解將是乙個集合。
2.將待求解的問題劃分為若干子問題,理清彼此間的巢狀關係。
3.選擇乙個貪婪選擇策略。只有當區域性的最優策略能夠產生全域性最優解時才可使用貪婪演算法。(可先選擇幾個實際情況分析是否適用貪婪演算法。一定注意判斷問題是否適用貪婪演算法,找到的解是否是最優解。)
4.對每乙個子問題求解,並將全部的解寫作原來問題的乙個解。
5.對所得的解進行演算法分析。包括演算法複雜度分析,證明是貪婪選擇(假設乙個最優解,並證明可修改這個解使其以貪婪演算法開始)。證明最優子結構(第一次選擇後轉化為怎樣的子問題,子問題的最優解是否包含在問題的解中)。
greedy (a,n)
return solution;
}
揹包(可分與不可分),貨郎擔,最優裝載,活動安排,多機排程。
資料結構中:單源點最短路徑,最小生成樹(prim,kruskal),huffman編碼。
演算法之貪婪演算法
雖然設計乙個好的求解演算法更像是一門藝術,而不像是技術,但仍然存在一些行之有效的能夠用於解決許多問題的演算法設計方法,你可以使用這些方法來設計演算法,並觀察這些演算法是如何工作的。一般情況下,為了獲得較好的效能,必須對演算法進行細緻的調整。但是在某些情況下,演算法經過調整之後效能仍無法達到要求,這時...
python 貪婪演算法
貪婪演算法 覆蓋問題,有個節目想要將自己的節目通過電台發布到幾個州,這些電台可能互相有所覆蓋,即覆蓋了相同的州,現在如何能找到幾個電台,最優的覆蓋這些州。想要電台覆蓋的州 states needed set mt wa or id nv ut ca az 每個電台覆蓋的範圍 stations sta...
演算法模式 貪婪演算法初識
作為科班畢業的程式設計師,在下的 能力感覺都是笑話。痛定思痛,決定啃一啃演算法。發現好像都是大學的課本知識,摸摸頭 尷尬。當然不能一口吃乙個胖子,這些僅作為入門學習 迭代法 貪婪法 窮舉法搜尋法 遞推法 遞迴法 回溯法 分治法 動態規劃法。這種方法模式一般將求解過程分成若干個步驟,但每個步驟都最貪心...