zoukankan      html  css  js  c++  java
  • 第四章实践报告

    一、.4-1 程序存储问题 (90 分)

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

    输入格式:

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

    输出格式:

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

    输入样例:

    在这里给出一组输入。例如:

    6 50 
    2 3 13 8 80 20

    输出样例:

    在这里给出相应的输出。例如:

    5

    二、问题描述

    这个问题要求我们找到一个存储方案,该方案可以存储的程序数最多,并且磁带的长度L是固定的,意味着存储程序的长度总和不能超过L。

    三、算法描述

     1 sort(l, l + n);
     2  
     3 int temp = 0;
     4     
     5     for (int i = 0; i < n; i++)
     6     {
     7         count += l[i];
     8         if (count <= length)
     9         {
    10             temp++;
    11         }               
    12     }
    13     cout << temp;

    通过sort排序将程序按长度从小到大排好序,每次存入剩下程序中长度最小的程序(贪心策略),直至不能再存入程序可以得到存入程序数最多方案。

    设E={2,3,8,13,20,80}为所给定的程序集合,E中按程序长度非减序排序,故程序2具有最小长度2。设A ⊆E是所给程序安排的一个最优解,且A中程序也按程序长度非减序排列,A中第一个程序是程序K。若K=2,则A就是一个以贪心选择开始的最优解。若K!=2,则设B=A-{K}∪{2}。由于f2≤fk,且A中程序相容,故B中程序也相容。又由于A和B程序个数相同,且A是最优的,故B也是最优的。

    进一步,在做了贪心选择,即选择了程序2后。若A是原问题的最优解,则A’=A-{2}是程序安排问题E{i∈E:si≥f2}的最优解。事实上,如果能找到E’的一个解B’,包含比A’更多的程序,则将程序2加入到B’中将产生E的一个解B,它包含比A更多的活动。这与A的最优性矛盾。

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

    主要是sort算法O(nlogn)(采用的是快速排序)和一个for循环O(n),因此时间复杂度为O(n)。

    空间复杂度为O(1),没有另外的数组等。

    五、心得体会

    实践第二题属实是难,一开始想到了用char数组存数字然后用sort排序根据第一题的贪心策略解题,发现投机取巧果然是没有用的。然后想到了从左扫描至右,递增不动,递减开始把第一个数删掉将后面数前移,直至删掉k个数。最后提交时是运行超时,时间复杂度是O(n3)属实难顶。

  • 相关阅读:
    事务和异常处理
    普通三层结构示例
    Viewstate与Static
    oracle 9i 的数据类型
    XSD数据集
    ASP.NET中的错误处理和程序优化
    PL/SQL程序设计
    ASP.NET 2.0中的异步页面
    Oracle中RowNum的用法
    .NET单元测试
  • 原文地址:https://www.cnblogs.com/thebest/p/11866384.html
Copyright © 2011-2022 走看看