第四章貪心算法實驗報告


《貪心算法實驗報告》 計科2001 陳梓聰 20201003024

       貪心算法的思想:通過第四章學習了貪心算法,我們知道,貪心算法總是做出在當下看來最好的選擇,通過每個最優的選擇來得出原問題的最優解。

       貪心算法的使用條件:貪心算法有的時候並不能得出最優解,只有在滿足一下兩個條件的時候才能使用:1.貪心性質:整體的最優解可通過一系列局部最優解達到,並且每次的選擇可以依賴以前做出的選擇,但不能依賴於以后的選擇。2.最優子結構: 問題整體的最優解包括子問題的最優解。

       貪心算法的局限性:貪心算法有他的局限性,有的時候我們選擇局部的最優解,但是它對與全局並非最優解,就比如硬幣找零問題。但是我們依然可以用我們上一章所學的動態規划思想來解決。

       貪心算法的分析過程:首先,我們需要確定我們的貪心策略,只有正確的貪心策略才能得出我們的結論。下面是我們的實驗題。

4-1程序儲存問題:

設有n 個程序{1,2,…, n }要存放在長度為L的磁帶上。程序i存放在磁帶上的長度是 li,1≤i≤n。 程序存儲問題要求確定這n 個程序在磁帶上的一個存儲方案, 使得能夠在磁帶上存儲盡可能多的程序。 對於給定的n個程序存放在磁帶上的長度,計算磁帶上最多可以存儲的程序數。

 

輸入格式:第一行是2 個正整數,分別表示文件個數n和磁帶的長度L。接下來的1行中,有n個正整數,表示程序存放在磁帶上的長度。

 

輸出格式:輸出最多可以存儲的程序數。

 

輸入:6 50              輸出: 5

2 3 13 8 80 20

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    
    int n, l, res;
    cin >> n >> l;
    int *a = new int [n];
    for(int i = 0; i < n; i ++) {
        cin >> a[i];
    }
    sort(a, a + n);
    for(int i = 0; i < n; i ++) {
        l -= a[i];
        if(l < 0) {
            res = i;
            break;
        }
    }
    cout << res;
    
    return 0;
}

 

 

貪心策略:我的貪心策略是將還未存入磁帶中最小的程序放入磁帶,直到放入一個程序后,再放入下一個程序時程序的總長度>L,此時能存下最多程序數。

心得與體會:貪心算法有的時候不能得到問題的最優解,但是其思想簡單,代碼思路清晰明了,能使用的時候不失為一種很好的方法。                                                                                                                                                                                                                                              


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM