貪心演算法(最優裝載)
阿新 • • 發佈:2018-12-21
貪心演算法
貪心本質:一個貪心演算法總是作出當前最好的選擇,也就是說,它期望通過區域性最優選擇從而得到全域性最優的解決方案。
貪心演算法祕籍:
(1)貪心策略
首先確定貪心策略,選擇當前看上去最好的一個方案。
(2)區域性最優解
根據貪心策略,一步一步地得到區域性最優解。
(3)全域性最優解
把所有的區域性最優解合成為原來問題的一個最優解。
最優裝載
加勒比海盜船——海盜船足夠大,但載重量為 C,每件古董的重量為 Wi,海盜們該如何把儘可能多數量的寶貝裝上海盜船? 演算法設計: (1)當載重量為 c 時,Wi 越小,可裝載的數量 n 越大。只要依次懸著最小重量古董,知道不能裝為止。 (2)把 n 個古董重量從小到大排序,然後根據貪心演算法儘可能多的選出前 i 個古董,直到不能裝為止,此時達到最優。
- 演算法實現:
#include<iostream> #include<algorithm> const int N = 10000; using namespace std; double w[N]; int main() { double c; int n; cout<<”請輸入載重量c及古董個數n:”<<endl; cin>>c>>n; cout<<”請輸入每個古董的重量,用空格分開:”<<endl; for(int i=0;i<n;i++) { cin>>w[i]; } sort(w,w+n); //按古董重量升序排列 double temp=0.0; int ans=0; //temp為已裝重量,ans為已裝古董個數 for(int i=0;i<n;i++) { temp+=w[i]; if(temp>=c) ans++; else break; } cout<<”能裝入的古董最大數量為:”<<enl cout<<ans<<endl; return 0; }