434
社区成员
发帖
与我相关
我的任务
分享1. 请用反证法证明“删数问题”的算法满足贪心选择性质(即设最优解不包含贪心选择,则可以通过转换找出一个更小的数,推出矛盾)
贪心选择在扫描数字的过程中,找到比当前数字更大的数并优先删除,这样可以确保留下的数字尽量小。
假设删数问题的最优解不包含贪心选择,即某一步选择了一个不是由贪心算法选出来的数字,而实际贪心选择留下的数字会更小。在这种情况下,将非贪心选择换成贪心选择,剩余的数字必然更小,与假设最优解矛盾。因此,删数问题的贪心选择性质成立。
比如 int n = 4321; 我们需要删除一位数字,得到的值最小。在贪心选择下,会删去4,剩下的数字是321;假设最优解是不删除4,即最优解不包含贪心选择,比如删除3,得到数字421.显然421>321,与假设矛盾。因此“删数问题”算法满足贪心选择性质。
2. 结合本章的学习,总结你对贪心法的体会和思考
用贪心算法的时候需要考虑问题有没有具备贪心选择性质,比如背包问题符合,而01背包不符合,否则可能得出错误结果。因此在使用之前需要对问题分析,看看问题符不符合贪心选择性质和最优子结构。
贪心算法得到的解是每一步最优解的累积,符合人的直觉,比如货币找零。但是有时候需要结合动态规划或者回溯来验证结果,比如dijkstra算法。