434
社区成员
发帖
与我相关
我的任务
分享一、请说明作业三”程序存储问题“的贪心策略,并用反证法证明满足贪心选择性质,并给出时间复杂度分析
7-2 程序存储问题
设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。
贪心策略:先把程序放在磁带上的长度进行从小到大的排序,然后依次放入程序,直至磁带上放不下。
反证法:设利用贪心算法得出的最优解为 [n1, n2, n3, ... , nx] ,若不选n1,选m(因为n1 的长度已是最短的,故 m > n1),设存在更优解 [m, n2, n3, ... , nx, ny] (更优比最优解至少多一个程序 )。因为更优解一定大于最优解,在更优解中第一个程序长度大于最优解第一个程序长度,还多了一个程序ny 都没超过磁带长度,所以最优解加上ny也一定不会超过 磁带长度,所以最优解应该为 [n1, n2, n3, ... , nx,ny], 这与假设相悖,所以不存在更优解,所以此策略满足贪心选择性质。
时间复杂度:只用了一个for循环,因此时间复杂度为O(n)。
二、你对贪心算法的理解
贪心算法就是在递归子结构中不断地寻找局部最优解达到一个全局的伪最优解的过程,需要证明。正是由于贪心算法是在局部中不断寻找最优解,没有用全局的视野找全局最优解,因此得到的解不一定是最优解,需要证明。