我在完成这个家庭作业问题时遇到了麻烦。我认为主要的困惑来自于没有确定反例的基础。
让
P1
,. 。 。 ,Pn
是存储在磁盘上的程序。计划Pi
需要Si
兆字节存储空间,磁盘容量为D
兆字节。其中D
小于存储的兆字节总和
(a)最大化磁盘上保存的程序数。证明或给出反例:贪心算法,按顺序选择程序 增加
Si
- 的顺序
(b)尽可能多地使用磁盘容量。证明或给出反例:选择程序的贪婪算法 减少
Si
编辑: 很抱歉没有澄清。
对于(a)部分,我最初的尝试是假设它没有按照增加Si
的顺序选择程序。选择Pa
,Pb
和Pc
其中Sa<=Sb<=Sc
,之后我并不真正理解如何更进一步,而(b)部分问同样的问题,但减少了{{} 1}}。
答案 0 :(得分:3)
a)定理:按照所需磁盘空间的增加顺序执行程序可确保尽可能多的程序运行。证明:证据是矛盾的。假设有一些其他方法可以选择允许更多运行的程序。然后,该方法必须在至少一种情况下选择一组不同的程序;也就是说,它必须选择至少一个需要比未选择空间更多空间的程序。然而,该方法也可能选择了需要较少空间的程序而不是另一个将其与贪婪算法所做的选择区分开来的程序。这与这种方法比贪婪方法更好的假设相矛盾。因此,没有哪种方法比贪婪方法更好:它是最优的。
b)定理:按所需磁盘空间的递减顺序执行程序并不能确保尽可能多地使用磁盘空间。证明:证据就是例子。考虑一个大小为10的磁盘和需要磁盘空间6,5和5的程序的情况。按照所需磁盘空间的降序排列程序允许我们只使用10个可用存储单元中的6个,而我们可能已经采用了两个程序需要5个单元,总共10个单元。因此,贪婪的方法并不能在所有情况下都给出最佳结果。