算法第四章上机实践报告

时间:2019-11-17 21:12:35   收藏:0   阅读:84

一、实践题目

程序存储问题

二、问题描述

设有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)。

 

五、心得体会

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

 

 

 

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!