greedy演算法的核心思想是首先計算覆蓋面大的部分,然後依次尋找其他覆蓋面最大的部分。該演算法的使用場景就像他的名字一樣,當符合貪婪屬性的時候就可以考慮。
states_needed = set(['北京', '上海', '廣州', '深圳', '杭州', '南京', '石家莊', '銀川'])
stations = {}
stations['kone'] = set(['北京', '上海', '廣州'])
stations['ktwo'] = set(['北京''杭州', '南京'])
stations['kthree'] = set(['廣州', '深圳', '杭州'])
stations['kfour'] = set(['北京', '銀川'])
stations['kfive'] = set(['石家莊', '銀川'])
final_stations = set()
while states_needed:
best_station = none
states_covered = set()
for station, states in stations.items():
covered = states_needed & states
if len(covered) > len(states_covered):
best_station = station
states_covered = covered
states_needed -= states_covered
final_stations.add(best_station)
print(final_stations)
hdu 4221 Greedy 貪心演算法
題意 做任務,每乙個任務i都有花費時間ci,截止時間di,penalty ti di ti為第i個任務的實際完成時間,di為其截至時間,要求所有任務的penalty盡可能的小乙個 思路 貪心演算法 要求截至日期最小的應該最早完成,因為拖得越晚,penalty越大 include include us...
Kruskal 演算法 Python版
好久沒寫了,有點遺忘記錄一下 kruskal 演算法 對所有的邊排序 依次選擇每一條邊,看是否能將邊加入到已經生成好的樹中 若是能,則加入 否則,繼續步驟2,直至新增到樹中的邊的數量為節點數 1 的時候 這裡用了並查集的思路 設定乙個記錄每乙個節點的父親的陣列,用於判斷將邊加進已生成樹時是否會有環生...
viterbi演算法 python版
牛mm細心給我講了乙個小時,終於明白它的含義,然後花了一兩節分布式資料庫的課實現了。當時牛mm還說不可能這麼快實現,結果不可能事還是發生了。發現python果真非常好用。不明白此演算法可以看這篇blog 初始化方法 viterbi演算法函式 結果列印輸出函式 nodes format path is...