问题描述:给定一个数字178543,目标是删除4个数字,使得剩下的数字最小。
贪心选择:每次删除当前位上数值最大的数字。
证明步骤:
1. 假设:假设存在一个最优解,它不包含贪心选择,即存在一个更优的解,它在某个步骤中没有删除当前位上数值最大的数字。
2.具体例子:以数字178543为例,按照贪心选择,我们应该删除8,因为8是当前最大的数字。假设最优解中没有删除8,而是删除了其他数字。
3.转换:我们将按照贪心选择法删除8后得到的数字与假设的最优解进行比较。按照贪心选择法,删除8后,我们得到的数字是17543。
4.比较:现在我们需要比较17543和假设的最优解。假设最优解中没有删除8,而是删除了其他数字,比如删除了7、5、4、3,得到的数字是18543/17843/17853/17854。显然,均大于17543。
5. 矛盾:这与我们的假设矛盾,因为我们假设的最优解应该比按照贪心选择法得到的解更优,但实际上17543更小。因此,我们的假设不成立。
6. 结论:所以,每次删除当前位上数值最大的数字是贪心选择性质,可以保证得到一个最优解。
体会:
贪心法是一种直观且易于理解的算法设计策略。它通常基于问题的特定性质,通过每一步都选择当前最优的解来尝试构建全局最优解。
在某些问题中,贪心法能够高效地找到全局最优解。这通常发生在问题具有贪心选择性质的情况下,即局部最优解能够导出全局最优解。
然而,贪心法并不总是有效的。在某些问题中,局部最优解可能无法导出全局最优解,导致贪心法失败。
思考:
在使用贪心法之前,需要仔细分析问题是否满足贪心选择性质。如果不满足,那么贪心法可能无法找到全局最优解。
即使问题满足贪心选择性质,也需要仔细考虑贪心策略的具体实现方式。不同的贪心策略可能导致不同的结果,因此需要选择最适合当前问题的策略。
贪心法通常与其他算法相结合使用。例如,在某些情况下,可以使用贪心法来生成一个候选解,然后使用其他算法(如动态规划、回溯等)来验证其最优性。
贪心法的效率通常很高,因为它只关注当前步骤的最优选择,而不考虑全局最优性的证明。然而,这也可能导致它在某些情况下无法找到全局最优解。因此,在选择算法时,需要根据问题的具体要求和约束来权衡贪心法的优缺点。