• 算法第四章上机实践报告


    一、实践题目

    程序存储问题

    二、问题描述

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

    三.算法描述

    贪心选择性质:

    证明:

    设A是最优解,且A中最先放入磁带的是程序k。

    若k = 1,则最优解包含程序1,即A是一个以贪心选择开始的最优解。

    若k>1    最优解不包含程序1,令B=A–{k}∪{1},因为程序 1 的长度小于程序 k 的长度,且 A中的程序个数与B相同,故B也是一个最优解,而B包含程序1,故总存在以贪心选择开始的最优存储方案。

    最优子结构性质:

    证明:

    假设A‘ 不是P’ 的最优解,设B’ 是P‘ 的最优解,且 | B' | > | A' |, 则 B’  ∪ {1} 是 P的解,且| B' | + 1 > | A |, 这与A是最优解矛盾,故A‘ = A - {1}是 P’ = {2, 3, ...,n}的一个最优解。

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

    由程序存储问题的贪心选择性质和最优子结构性质,容易证明算法的正确性,算法的主要计算量在于将程序依照长度从小到大排序,所以算法的时间复杂度为O(nlogn)。没有使用辅助空间,空间复杂度为O(1)。

    五、心得体会

    本次上机实验是为了巩固对贪心算法的掌握程度,用该算法解决问题时最重要的是贪心策略的确定,只要确定了贪心策略,每次根据贪心策略选择目前最优的解即可得到整体最优解。

     

  • 相关阅读:
    Unity中 mesh生成斜坡
    设计模式
    Go语言高级编程
    Go语言高级编程
    agentzh 的 Nginx 教程(版本 2020.03.19)
    ubuntu18安装mysql5.7并配置远程连接
    创建图库
    交点修改
    显示中文
    浅谈前端水印
  • 原文地址:https://www.cnblogs.com/fengwanthousand/p/11877685.html
Copyright © 2020-2023  润新知