- 请用反证法证明“删数问题”的算法满足贪心选择性质(即设最优解不包含贪心选择,则可以通过转换找出一个更小的数,推出矛盾)
假设:
存在一个最优解不包含贪心选择,即假设存在一种删除方案,在删除过程中不总是选择当前最小的数字,但最终得到的新数是最小的。
证明:
假设在某一时刻,最优解选择了一个较大的数字d1(不是当前可选的最小数字),而贪心算法选择了当前最小的数字d2(d2<d1)。
在这一步之后,最优解和贪心算法的结果开始不同。
无论最优解在后续步骤中如何删除数字,由于已经选择了一个较大的数字d1,它无法将d1替换为一个更小的数字d2(因为删除操作是有限制的,并且不能改变数字的原始顺序)。
因此,最优解得到的数字在高位上至少有一个比贪心算法结果中对应的数字要大(即d1的位置)。
这意味着最优解得到的数字必然大于或等于贪心算法得到的数字(在数字的其他部分相同的情况下,高位数字较大则整个数字较大)
但这与我们的假设矛盾,因为假设中最优解得到的数字是最小的
结论:
因此,我们的假设不成立,即不存在一个最优解不包含贪心选择而能得到最小的数字。
所以,贪心算法总是能够选择当前最优(即最小的)数字,从而确保最终得到的新数是最小的。
- 结合本章的学习,总结你对贪心法的体会和思考
贪心法的核心思想是在每一步选择当前最优的解,这使得算法设计和实现相对简单。贪心法通常不需要复杂的数据结构和算法,因此在许多情况下,贪心法的时间复杂度和空间复杂度都较低。贪心法的一个关键假设是局部最优解能够导致全局最优解。这意味着在每一步选择当前最优的解后,最终的解也是全局最优的。然而,这并不总是成立,因此贪心法并不适用于所有问题。
常见的适用贪心法的问题包括:
活动选择问题
分数背包问题
哈夫曼编码
最小生成树
最短路径
尽管贪心法有其局限性,但在实际应用中,贪心法仍然是一种非常有用的工具。许多实际问题可以通过贪心法得到高效的近似解,特别是在时间和空间复杂度受限的情况下。
通过查找资料我了解到在设计贪心算法时,通常需要以下几个步骤:
1.确定贪心选择性质:证明通过局部最优选择可以得到全局最优解。
2.确定最优子结构性质:证明问题的最优解包含其子问题的最优解。
3.设计贪心选择策略:确定在每一步如何选择当前最优的解。
4.实现算法:根据贪心选择策略实现算法,并验证其正确性和效率。
posted @
2024-11-24 22:53
水泥猫
阅读(
10)
评论()
编辑
收藏
举报