反证法证明“删数问题”的算法满足贪心选择性质

软工2301-冯畅 2024-11-23 20:38:07

证明“删数问题”的算法满足贪心选择性质(反证法)

删数问题:给定一个n位正整数a和正整数k,要求去掉a中的任意k个数字后,剩下的数字按原次序排列组成一个新的正整数,且该新数尽可能小。如果数字最前面有0,则不输出。

贪心选择性质:在每一步选择中,都采取在当前状态下最好或最优(即最有利)的选择,从而希望能够导致结果是全局最好或最优的算法。对于本题,贪心选择意味着在每一步都选择当前最小的非零数字(如果存在多个相同的最小数字,则选择最靠前的那个),并跳过后续k-1个数字。

反证法证明

  1. 假设
    假设存在一个最优解,它不包含贪心选择,即存在某一步,最优解没有选择当前剩余数字中的最小非零数字。

  2. 推理过程
    设a是一个n位正整数,最优解删除后的数为b,且假设在删除过程中,存在某一步,最优解没有选择当前剩余数字串中的最小非零数字d_i(i为当前数字串中的某个位置)。

    我们构造一个新的数b',该数在相同步骤中选择了d_i,并跳过后续k-1个数字(如果k还未减到0),其余步骤按照最优解的选择进行。由于d_i是当前剩余数字中的最小非零数字,因此选择d_i后的新数b'的前缀将小于或等于最优解b的前缀(在相同删除步骤下比较)。

    如果b'比b小,则与b是最优解矛盾。如果b'与b的前缀相同,则继续比较后续数字。由于后续数字的删除步骤是按照最优解进行的,因此如果前缀相同,则整个数b'要么与b相同,要么比b小(因为后续步骤中的删除也是最优的)。但由于我们在某一步选择了更小的数字d_i,所以实际上b'不可能与b完全相同(否则最优解也会选择d_i,与假设矛盾)。因此,b'必然比b小。

  3. 矛盾
    由于我们找到了一个更小的数b',这与假设b是最优解矛盾。

  4. 结论
    因此,我们的假设不成立,即最优解必须包含贪心选择,每一步都选择当前剩余数字中的最小非零数字(如果存在多个相同的最小数字,则选择最靠前的那个)。

对贪心法的体会和思考

  1. 适用性与局限性
    贪心法是一种直观且高效的算法设计策略,特别适用于具有最优子结构和贪心选择性质的问题。然而,贪心法并不总是能找到全局最优解,因为它依赖于局部最优选择来构建全局解。对于某些问题,局部最优选择可能无法导致全局最优解。

  2. 策略选择
    在使用贪心法时,关键在于选择合适的贪心策略。对于不同的问题,可能需要不同的策略来确保算法的正确性和效率。因此,在设计和实现贪心算法时,需要对问题进行仔细的分析和建模。

  3. 结合其他算法
    贪心法有时可以与其他算法(如动态规划、回溯、分支定界等)结合使用,以解决更复杂的问题。例如,在某些情况下,可以使用动态规划来确定贪心策略的正确性,或者使用回溯来搜索所有可能的解并验证贪心解的最优性。

  4. 调试与验证
    由于贪心法不一定总是能找到最优解,因此在实现后需要进行充分的调试和验证。可以通过生成测试用例、比较贪心解与最优解(如果可知)或使用其他算法来验证贪心解的正确性。

  5. 实际应用
    贪心法在许多实际问题中有广泛的应用,如活动选择、背包问题的分数背包版本、哈夫曼编码、最小生成树的Prim算法等。通过合理地选择贪心策略,可以有效地解决这些问题并获得良好的性能。

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

434

社区成员

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

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