算法设计与分析第四章作业

计科2101袁正毅 2022-11-21 19:21:59

 

一.请说明作业三”程序存储问题“的贪心策略,并用反证法证明满足贪心选择性质,并给出时间复杂度分析

7-2 程序存储问题

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

贪心策略:首先将所有每个程序的长度从小到大排序,然后定义sum等于0,将程序长度逐个相加,直到大于磁带长度时停止,定义cnt记录前面程序的个数并输出。

反证法证明: 设 利用贪心算法得出的最优解为 [n1, n2, n3, ... , nx] ,若不选n1,选m(因为n1 的长度已是最短的,故 m > n1),设存在更优解 [m, n2, n3, ... , nx, ny] (更优比最优解至少多一个程序 )。因为更优解一定大于最优解,在更优解中第一个程序长度大于最优解第一个程序长度,还多了一个程序ny 都没超过磁带长度,所以最优解加上ny也一定不会超过 磁带长度,所以最优解应该为 [n1, n2, n3, ... , nx,ny], 这与假设相悖,所以不存在更优解,所以此策略满足贪心选择性质。

时间复杂度:一个for循环完成数组的遍历与对比,时间复杂度为O(n)。

空间复杂度:算法只使用了普通变量sum记录放入的个数,空间复杂度为O(1)。

二、 我对贪心算法的理解

        贪心算法又称之为贪婪算法,在考虑问题时,总是做出在当前状况来说最好的算则,而不从整理来考虑。 从某种意义上说是局部最优解,贪心算法所得到的答案并不一定是整体最优解,所以在使用贪心算法一定要考虑清楚,是否能使用贪心算法。 选择的贪心策略必须具有无后效性,即当前选择的结果必须不能对之前的结果状态产生影响,而只与当前状态有关。

...全文
27 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

434

社区成员

发帖
与我相关
我的任务
社区描述
广东外语外贸大学信息科学与技术学院
算法 高校
社区管理员
  • brisksea
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧