zoukankan      html  css  js  c++  java
  • 算法第四章上机实践报告

    1.实践题目:程序存储问题

    2.问题描述:

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

    输入格式:

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

    输出格式:

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

    3.算法描述(说明你的贪心策略,并且参考会场安排问题,利用反证法证明贪心选择和最优子结构性质):

    贪心策略:每次贪心选择当前所有程序中长度最短的那一个程序(每次选择前需要升序排序,用当前磁带长度需减去选择程序的长度,直到磁带长度小于当前最小程序长度)

    反证法证明贪心选择:设集合E={x1,x2,x3...xn}(集合已按升序排序,x1是最短长度的程序)。假设最优解A不包含x1,其中最短的程序长度为k,假若k = x1,则最优解中包含x1; 若A中k> x1,x1余A中其他的程序长度相容,故存在一个B = {A-{k}∪{x1}} ,从而B也是最优解,故可知最优解一定含有X1(长度最短的程序),得证。

    反证法证明最优子结构性质:已知A是程序存储问题E={X1,X2……,Xn}的满足贪心选择性质的最优解,X1=1,则A’=A-{X1}是E’={ X2,X3,……,Xn}的一个最优解。假设存在B’>A’,则有B=B’∪{1}>A’∪{1}=A,则B是E的最优解,与“A是E的最优解”矛盾,所以不存在这样的B和B’。因此,E的最优解A包含其子问题的子问题的最优解,得证。

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

    时间复杂度:sort()排序为快排,因此时间复杂度为O(nlogn)

    空间复杂度:仅需存储有限个数的变量结果,因此空间复杂度为O(1)

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

    贪心算法是一种局部最优的概念,虽然不的得到整体最优解,但结果是最优解的很好的近似解。贪心算法主要是要判断贪心最小还是最大,思想好理解,但真正打代码还会有些困难,实验上机课与搭档只完成了两题的代码。

  • 相关阅读:
    C++学习之:括号匹配与栈的使用
    mooc网站以及学习资料收集
    android 获取字符串的方法
    androidStudio中如何加载字体资源?
    BluetoothGatt API
    Android 反编译工具简介
    BluetoothAdapter.LeScanCallback 参考文档
    openCV1
    Android客户端向服务器端发送数据的流程(1)
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/chengyi1102/p/11887340.html
Copyright © 2011-2022 走看看