20201003008计科2001陆启康算法第四次上机实验报告之贪心算法

 实践题目名称

4-1 程序存储问题 (40 分)

问题描述

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

算法描述(贪心选择性质)

题目要求在有限的空间内尽可能多的装入程序,那么肯定是将大小最小的程序优先装入,使得装入的程序最多。那么该算法在进行相关输入后。首先将表示各程序大小的数组进行由小到大的排序,再按顺序将程序装入空间中,直至不能装入为止,记录装入的程序的个数并输出。

具体代码

#include<iostream>

#include<algorithm>

using namespace std;

int main(){

 int n,L;

 cin>>n>>L;

 int a[n];

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

  cin>>a[i];

 }

 sort(a,a+n);

 int count=0;

 int sum=0;

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

  if(a[i]+sum>L){

   break;

  }

  else{

   count++;

            sum+=a[i];

  }

 }

 cout<<count;

}

算法时间及空间复杂度分析

时间:

O(nlogn)(快排平均时间复杂度)

空间:O(n)

对贪心算法的理解

贪心的每一步都是当前的最优解,所有步骤完成后就是总的最优解。

它有两个重要性质:贪心选择性质和最优子结构性质。

贪心选择性质:指问题的最优解可以通过一系列局部最优解的选择得到。

最优子结构性质:指问题的最优解包含其子问题的最优解。

 

心得体会

贪心算法非常常见且实用。

posted @ 2021-11-12 16:11  我不要摆烂  阅读(53)  评论(0编辑  收藏  举报