算法第4章实践报告
算法第4章实践报告
-
实践题目
-
程序存储问题
-
问题描述
- 设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。
-
算法描述
- 将n个程序的长度又小到大排序并放在数组中
- 设置整数型变量K,从数组第一个开始相加,直到K比L大为止,定位最后一个加到K的数在数组的位置,则计算磁带上最多可以存储的程序数即为该数组所在位置减1.
-
算法时间及空间复杂度分析(要有分析过程)
-
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int b){
return a<b;
}
int main(){
int n,m;
int nums[100];
cin>>n>>m;
if(n==0) cout<<0;
for(int i=0;i<n;i++){ //时间复杂度为O(n)
cin>>nums[i];
}
sort(nums,nums+n,cmp); //O(nlogn)
int k=0;
for(int i=0;i<n;i++){ //O(n)
k+=nums[i];
if(k>m) {
cout<<i;
break;
}
if(k<=m&&i==(n-1))
cout<<n;
}
return 0;
} - 所以此题时间复杂度=O(nlogn)
-
心得体会(对本次实践收获及疑惑进行总结)
- 注意临界点,切勿粗心,多看多打代码。