算法第四章实践报告

1.实践题目

4-1 程序存储问题

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

2.问题描述

利用贪心算法:先将程序在磁带上的长度进行排序,优先选择程序磁带长度较小的,最多能存储的程序数与长度下标相关联。当程序正好能全部存储,返回程序总数。

 

#include<iostream>
#include<algorithm> 
using namespace std;
int l[100];

int most(int* a, int n, int L)
{
    int sum = 0;
    for(int i = 0; i < n; i++)
    {
        sum += l[i];
        if(sum > L)
            return i;
        if(i == n-1)
            return n;
    }
}

int main()
{
    int n, L;
    cin >> n >> L;
    for(int i = 0; i < n; i++)
        cin >> l[i];
    sort(l, l+n);
    cout << most(l, n, L);
    
    return 0;
 }
View Code

 

 

3.算法描述

 

int most(int* a, int n, int L)
{
    int sum = 0;
    for(int i = 0; i < n; i++)
    {
        sum += l[i];
        if(sum > L)
            return i;
        if(i == n-1)
            return n;//刚好能装下
    }
}
View Code

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

空间复杂度辅助存储l[n]:O(n)

时间复杂度循环遍历程序长度:O(n)

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

贪心算法大多以某种形式进行排序,选择最优;局部最优解可能导致全局最优解

 

 

posted @ 2019-11-15 10:56  咖啡yuan  阅读(138)  评论(0编辑  收藏  举报