【算法】第四章实践报告

1. 实践题目

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

2. 问题描述

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

3. 算法描述

#include <iostream>

#include <algorithm>  //sort排序需要调用的标准库

using namespace std;

int shiyan(int a[],int n,int L){

sort(a,a+n); //sort函数

int temp = 0;

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

temp=temp+a[i];

if(temp>L) return i;

if(i==(n-1))  return n;

}

}

int main()

{

int i,n,L;

cin>>n>>L;

int *a=new int[n];

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

{

cin>>a[i];

}

cout<<shiyan(a,n,L);

}

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

程序中采用sort函数对数组进行排序,其时间复杂度是n*log2(n)nlogn排好序后,就是从小到大加入数组元素,知道存满为止,这一过程时间复杂度为n。空间复杂度,不考虑sort函数,由于循环体中的代码须要执行n次则其O(n)。

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

这次是课上和队友结对编程完成的,其实也很简单,排好序之后,直接在循环体中核心代码temp=temp+a[i];if(temp>L) return i;if(i==(n-1)就好了,我一开始是用选择排序法对数组进行排序的,但是老师过来就直接提问为什么不直接采用sort函数呢?那是我才醒悟过来(但是还没怎么用过sort函数排序),的确采用sort函数后,做题时间都省掉一大半了,打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高

猜你喜欢

转载自www.cnblogs.com/Jergens/p/10054642.html