一。实践题目
7-3 程序存储问题问题描述
二。问题描述
设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。
三。算法描述
贪心策略为在所有未放进磁带的程序中选择长度最小的程序放进磁带,所以先对程序先进行长度排序,再从小开始逐一放到磁带,直到磁带装满
sort(a,a+n); for(int i=0;i<n;i++){ L=L-a[i]; if(L>=0){ sum++; } if(L<0) break; }
四。算法时间及空间复杂度分析
算法中有快速排序O(nlogn),进行单循环O(n),所以时间复杂度为O(nlogn)。
使用一维数组,所以空间复杂度为O(n)。
五。心得体会
对分析贪心算法性质有了更好的提升,在分析时更注重在不同情况下贪心算法对子问题求解时可以正确实现贪心策略。