第四章实验报告

1.     实践题目

7-3 程序存储问题 (90 分)

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

2.     问题描述

输入格式:

第一行是2 个正整数,分别表示文件个数n和磁带的长度L。接下来的1行中,有n个正整数,表示程序存放在磁带上的长度。

输出格式:

输出最多可以存储的程序数。

3.     算法描述

贪心算法的思想就是将尽可能多的程序放入磁带中,其实问题实质就是将程序的大小按照非降序排序后,首先将小的放进磁带中,直到磁带放不下了,就停止运行。

先讲各个数排列,为了存储最多的程序数,就从小到大将数填入磁带上。

具体实行过程:

 sort(a,a+n);

int sum = 0;

int i= 0;

while(sum<=l&&i<n){

   sum+= a[i];

   if(sum<=l&&i==(n-1)) cout<<n;

   i++;

   if(sum>l)      cout<<i-1;

    }

return 0;  

}

4.     算法时间及空间复杂度分析(要有分析过程)

本题中算法复杂度为On

根据代码:

for(int i=0;i<n;i++){
m -= a[i];
if(m>=0){
num++;
}

本题所需要计算量也只有此次循环,所以时间复杂度为On

本题解的算法空间复杂度也为On),即为存储程序量的数组,后排序,也是原地排序,所以无需额外申请多余的空间;

5.     心得体会(对本次实践收获及疑惑进行总结)

本题十分简单,却体现出了贪心算法的特点,在每一个小问题解决后,相应的大问题也会得到解决。

posted @ 2018-12-02 18:52  鸡哥最叻叻  阅读(83)  评论(0编辑  收藏  举报