貪心演算法的核心就是:在每一步選擇中都採取最好或者最優(即最有利)的選擇,從而希望能夠導致結果是最好或者最優的演算法。
假設存在下面需要付費的廣播台,以及廣播台訊號可以覆蓋的地區。如何選擇最少的廣播台,讓所有的地區 都可以接收到訊號。
思路:
1)遍歷所有的廣播電台, 找到乙個覆蓋了最多未覆蓋的地區的電台(此電台可能包含一些已覆蓋的地區,但沒有關係)
2)將這個電台加入到乙個集合中(比如 arraylist), 想辦法把該電台覆蓋的地區在下次比較時去掉。
3)重複第 1 步直到覆蓋了全部的地區
第一輪我們找到和上面集合取交集最大的是k1,於是maxkey指向k1,並將k1放入結果集
第二輪未訪問的城市集中就要除去k1中的城市,變成:「廣州、深圳、成都、杭州、大連」,我們找到和該集合取交集最大是k2,於是maxkey指向k2,並將k2放入結果集
…依次類推,直到未訪問的城市集合為空
import j**a.util.arraylist;
import j**a.util.hashmap;
import j**a.util.hashset;
public class greedyalgorithm
}//maxkey != null, 就應該將maxkey 加入selects
if(maxkey != null)
}system.out.println("得到的選擇結果是" + selects);//[k1,k2,k3,k5]
}}
貪心演算法解決跳馬問題 貪心演算法及解決的問題 10
貪心演算法是一種在每一步選擇中都採取在當前狀態下最好或最優 即最有利 的選擇,從而希望導致結果是全域性最好或最優的演算法。貪心演算法與動態規劃的不同在於它對每個子問題的解決方案都做出選擇,不能回退。動態規劃會儲存以前的運算結果,並根據以前的結果對當前進行選擇,有回退功能。貪心法可以解決一些最優化問題...
貪心演算法 區間覆蓋
數軸上有 n 1 n 25000 個閉區間 ai,bi 選擇盡量少的區間覆蓋一條指定線段 1,t 1 t 1,000,000 覆蓋整點,即 1,2 3,4 可以覆蓋 1,4 不可能辦到輸出 1。第一行 n和t 第二行至n 1行 每一行乙個閉區間。輸出選擇的區間的數目,不可能辦到輸出 1 input ...
C 區間覆蓋 貪心演算法
數軸上有 n個閉區間 ai,bi 選擇盡量少的區間覆蓋一條指定線段 1,t 不可能辦到輸出 1。定義乙個結構體代表區間,在讀入資料後,對資料進行多關鍵字排序 第一是左端點小的在前,第二是右端點大的在前 對資料進行過濾,左端點相同的區間只保留區間長度最大的,如果當前區間被之前保留的區間完全包含則去掉。...