再談貪心演算法

2021-10-07 03:35:02 字數 1034 閱讀 6177

我一直認為貪心演算法可以說是這些演算法中最好理解,最簡單了,因為他比較符合我們人類的心理,符合我們平時的思考模式,幾乎總是選擇最優解,去找最大利益而不去考慮後效性的問題。但是才看書沒幾行一句話就給我噎住了,那句話寫的時我們平時習慣用貪心演算法解決資料規模較大的問題,資料規模較大我想到的是大數乘之類的問題,貪心跟資料規模有啥關係呢,查閱了資料,讓我聯想到了貪心的原理,是將乙個大問題分解成很多小問題,我在每一步都去選擇最優解,不去考慮後效性,那麼這句話就可以理解了,分解問題就可以將大資料變小資料,從而實現目的。

當乙個問題用貪心演算法需要考慮後效性的時候我們就一般採用動態規劃求解。

下面看一道我之前沒見過的比較有趣相對而言也比較 複雜的貪心問題

乘船問題

描述進行一次獨木舟的旅行活動,獨木舟可以在港口租到,並且之間沒有區別。一條獨木舟最多只能乘坐兩個人,且乘客的總重量不能超過獨木舟的最大承載量。我們要儘量減少這次活動中的花銷,所以要找出可以安置所有旅客的最少的獨木舟條數。現在請寫乙個程式,讀入獨木舟的最大承載量、旅客數目和每位旅客的重量。根據給出的規則,計算要安置所有旅客必須的最少的獨木舟條數,並輸出結果。

輸入第一行包括兩個整數n,1<=n<=10,c為一條獨木舟的最大承載量,n為人數; 

接下來的一組資料為每個人的重量(不能大於船的承載量); 

輸出所需要的最少獨木舟的條數。

樣例輸入

85 6               

5 84 85 80 84 83   

樣例輸出

5                  

貪心策略就是最重的人和最輕的人匹配

#include#include#includeusing namespace std;

int n,w[12],c,sum;

bool a[12];

main()

if(w[i]<=c)

sum++;

} printf("%d",sum);

}

經典貪心演算法 貪心演算法概述

貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...

演算法 貪心演算法

把乙個複雜問題分解為一系列較為簡單的區域性最優選擇,每乙個選擇都是對當前解的乙個擴充套件,知道獲得問題的完整解。在解決問題的策略上目光短淺,只根據當前已有的資訊做出選擇,而且一旦做出了選擇,不管將來有什麼結果這個選擇都不會改變。換言之,貪心法並不是從整體最優考慮,它所做出的選擇只是在某種意義上的區域...

演算法 貪心演算法

集合覆蓋問題 旅行商問題等都屬於np完全問題,在數學領域上並沒有快速得到最優解的方案,非常適合用貪婪演算法。判斷方法 1.元素較少時,一般執行速度很快,但隨著元素數量增多,速度會變得非常慢 2.涉及到需要計算比較 所有的組合 情況的通常是np完全問題 3.無法分割成小問題,必須考慮各種可能的情況。這...