算法第四章上机实践报告

一、实践题目

程序存储问题

二、问题描述

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

三、算法描述

1.贪心选择性质

设程序已经参照长度从小到大排序,(x1, x2, ..., xn)是程序储存问题的一个最优解,设k = min(1<=i<=n) {i | xi = 1},如果给定的程序存储问题有解,则1<=k<=n。

① 当k = 1时,(x1, x2, ..., xn)是一个满足贪心选择性质的最优解。

② 当k > 1时,取y1 = 1,yk = 0,yi = xi,1<i<=n,i≠k,则

(连加,i = 1~n)liyi = l1 - lk + (连加,i = 1~n)lixi <= (连加,i = 1~n)lixi <= L

因此,(y1, y2, ..., yn)是所给程序存储问题的可行解。

另一方面,由(连加,i = 1~n)yi = (连加,i = 1~n)xi知,(y1, y2, ..., yn)是满足贪心选择性质的最优解。所以,程序存储问题具有贪心选择性质。

2.最优子结构性质

设(x1, x2, ..., xn)是程序存储问题的满足贪心选择性质的最优解,则x1 = 1,(x2, x3, ..., xn)是磁带长度为L-l1、待存放程序为{2, 3, ..., n}时相应程序存储问题的最优解。也就是说,程序存储问题具有最优子结构性质。

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

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

五、心得体会

贪心算法不是对所有问题都能得到整体最优解,关键在于贪心策略的选择,贪心策略的证明需要从两个基本要素入手:最优子结构性质和贪心选择性质。编程时常使用排序算法进行排序,可能会用到结构体、优先队列等数据结构。

posted @ 2019-11-15 15:33  超高校级的院长  阅读(100)  评论(0编辑  收藏  举报