第四章算法上机实验报告

4-1程序存储问题

1.题目:设有n 个程序{1,2,…, n}要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n个程序在磁带上的一个存储方案,使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。

2.算法描述:

先将所以程序的长度由小到大进行排序;

贪心策略:每次都优先选择所剩程序中长度最短的存放入磁带,且放入前需比较该程序长度是否超过所剩磁盘长度;

sort(a,a+n);

int count=0;

for(i=0;i<n;i++){

    if(a[i]<=l){

        count++;

        l-=a[i];

    }else{

    break;

    }

}

3.证明该算法满足贪心选择策略:

若长度最短的程序记为程序i,当满足贪心选择策略,选择程序i,磁带中已有一个程序;若不选择程序i,选择长度大于i的一个程序k,则现在磁带中也有一个程序,但在其中包含的最优解应该是优先选择长度更小的程序i,程序i再加上一段长度的程序才会等于程序k的长度,则存入的程序数量会增加;

4.时间复杂度:O(nlogn),对程序按从小到大的序列进行快排;

5.贪心算法理解:贪心算法总是作出在当前看来最好的选择,只是在某种意义上的局部最优解,所以也并不是所以问题都可以采用的,无法采用时还是要使用动态规划的方法,所以要了解贪心算法产生全局最优解的条件,关于贪心选择性质和最优子结构性质,在很多情况下,贪心算法虽然不能得到整体最优解,其最终结果却是十分接近最优解的。

posted @ 2021-11-14 16:18  aoapppggg  阅读(21)  评论(0编辑  收藏  举报