434
社区成员
发帖
与我相关
我的任务
分享反证法证明“删数问题”的算法满足贪心选择性质(即设最优解不包含贪心选择,则可以通过转换找出一个更小的数,推出矛盾)
假设存在一个最优解 O不包含贪心选择。
我们的目标是通过这个假设推导出一个矛盾,从而证明贪心选择性质成立。
在“删数问题”中,贪心选择通常指的是每次删除当前能够删除的最大数字,以期最终得到最小的剩余数。
假设我们有一个序列 S={a1,a2,...,an}S={a1,a2,...,an},其中 ai是第 i个数字。
根据贪心策略,我们应该先删除最大的数字。如果最优解 O不包含这种选择,那么它必然选择了某个非最大数字进行删除。
假设最优解 O首先删除了数字 x,而根据贪心策略应该删除的是数字 y(且 y>x)。
删除 x后,剩下的序列为 S′。
现在我们考虑删除 y而不是 x,得到的新序列为 S′′。
因为 y>x,删除更大的数字 y后,剩余的数字总和会小于或等于删除 x后的剩余数字总和。
如果删除 y后得到的序列 S′′ 的总和比删除 x后得到的序列 S′ 的总和更小,这就说明我们找到了一个比最优解 O更优的解。
这与 O是最优解的假设相矛盾。
因此,假设最优解不包含贪心选择是错误的。
所以,最优解必须包含贪心选择,即每次删除当前能够删除的最大数字。
由此,我们证明了“删数问题”的算法满足贪心选择性质。
贪心法的核心在于每一步都做出当前看似最优的选择,期望这些局部最优选择能导致全局最优解,关键在于证明每一步的贪心选择不会错过全局最优解。算法具有“无后效性”(即某一步决策后,后续决策不再受此影响)和“贪心选择性质”。
优点:贪心法通常简单高效,时间复杂度较低,适合大规模数据。
缺点:并非所有问题都能用贪心法解决,有时贪心选择会导致无法达到全局最优解。例如,区间调度问题在某些情况下不能使用贪心法直接求解。