1. 用反证法证明“删数问题”的算法满足贪心选择性质
删数问题:给定一个非负整数,删除其中若干个数字,使得剩下的数字形成的数尽可能小。
贪心选择性质:每次删除最高位的尽可能大的数字。
证明:
假设最优解不包含贪心选择,即存在一个最优解,其中某一步删除的不是当前最高位的尽可能大的数字。
步骤:
-
假设:
-
设原数为 24873。
-
假设最优解在某一步删除的是第 4位上的数字 7(7 不是当前最高位的尽可能大的数字),形成的数为 2483。
-
设当前最高位的尽可能大的数字为 8(3<4),即 7<8。
-
-
推导矛盾:
-
如果我们按照贪心策略,先删除 8,则形成的数为 2473。
-
由于 7<8,显然 3471 的前缀比 2483 更小(在删除相同数量的数字的情况下)。
-
接下来,我们可以继续按照贪心策略删除数字,最终得到的数(设为23 )必然小于或等于 2473(因为每一步都是选择当前最高位的尽可能大的数字删除)。
-
因此,23<2483。
-
-
结论:
-
由于我们找到了一个比最优解 更小的数,这与最优解的假设矛盾。
-
因此,我们的假设不成立,即最优解必须包含贪心选择。
-
2. 对贪心法的体会和思考
贪心法的算法设计相对简单,容易理解和实现。它不需要复杂的搜索或回溯,减少了计算量。贪心法通常将问题分解为一系列子问题,每个子问题都选择当前最优的解。