算法第四章上机实验报告
题目名称
4-1 程序存储问题
问题描述
设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。
算法描述
采用贪心算法,本题贪心策略是比较找到最小的磁带长度,先进行由小到大排序,再进行程序存放磁带,当放到不能放时跳出循环,此时的循环个数就是能够存放的最大值。
算法时间复杂度分析
排序的时间复杂度:O(n)= nlogn
寻找长度选择的时间复杂度:O(n)= n
对贪心算法的理解
在对问题求解时,贪心算法总是作出当前看来最好的选择,不从整体最优上加以考虑,它所做的仅是某种意义上的局部最优解。
在运用贪心算法的时候,我们也要按照步骤出发思考
(1)建立数学模型;
(2)把求解问题分成若干个子问题;
(3)对每一个子问题求解,得到子问题的局部最优解;
(4)把子问题的局部最优解合成原先解问题的一个解;
心得体会
贪心选择是采用从上向下,迭代的方法做出选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题。对于一个具体问题,要确定它是否具有贪心选择的性质,我们必须证明每一步所作的贪心选择最终能得到问题的最优解。通常可以首先证明问题的一个整体最优解,是从贪心选择开始的,而且作了贪心选择后,原问题简化为一个规模更小的类似子问题。然后,用数学归纳法证明,通过每一步贪心选择,最终可得到问题的一个整体最优解。