第四章算法作业amns

ZBW139 2024-11-24 16:33:19

贪心算法学习心得

在学习贪心算法这一章节时,我深刻体会到了这种算法的优雅与挑战。让我先从一个经典问题的证明开始,然后谈谈个人的学习体会。

一、删数问题的贪心选择性质证明

删数问题是指从一个n位数中删除k个数字,使得剩下的数字最小。例如从1432219中删除3个数字,最终得到的最小数应该是1219。这个问题的贪心策略是从左向右扫描,删除第一个比后面数字大的数字。下面用反证法来证明这个策略的正确性:

假设存在最优解S,它不包含我们的贪心选择。设第一个违反递增的位置是第i位,即第i位的数字a比第i+1位的数字b大。在最优解S中,如果保留了数字a而删除了其他某个数字x,那么我们可以构造一个新解S':删除a而保留x。因为a>b,所以把a换成b必然会得到一个更小的数,这与S是最优解矛盾。

举例说明:对于数字1432219,第一次扫描时发现4>3,按照贪心策略应该删除4。如果最优解保留了4而删除了其他数字,那么无论删除哪个数字,保留4都会导致结果比删除4大,这就产生了矛盾。因此,贪心选择性质得证。

 

 

 

 

 

二、对贪心算法的思考与体会

啊首先我先讲讲我对贪心的感受,贪心在很多优化的时候会出现,尤其是感觉常规方法的复杂度不尽人意,而且题目有很强的按一定特殊逻辑走的趋势,往往就要用贪心算法。

但是贪心解好想,不过最优解难想,往往还是要简单证明或者推导一下,即使充分性不能证明,必要性还是可以看看的。

贪心得多练,多感受,特别是在优化里,搜索啥的,会出现,也挺正常。不过有时候贪心和启发式都有一定不确定性,不过可以解决90%的代码,特别是NPhard或者NP完全问题,还是很有意义的

 

 

 

 

 

 

 

 

1. 直觉与证明的矛盾
贪心算法最大的特点是直觉性强但证明难。很多时候,我们能够凭直觉想到贪心策略,但要严格证明其正确性却需要下很大功夫。这种矛盾在学习过程中经常出现,也促使我更加重视算法的理论基础。

2. 证明技巧的积累
在学习过程中,我发现反证法是证明贪心算法正确性的有力工具。通过假设存在更优解,然后推导出矛盾,这个思路在很多贪心问题中都能使用。这种证明技巧的掌握,对提高算法思维能力很有帮助。

3. 实践中的发现
通过大量练习,我注意到贪心算法往往具有以下特点:
- 贪心策略通常直观简单,但证明过程可能复杂
- 很多贪心题目都隐藏在其他算法主题中
- 反例的构造和验证极其重要
- 局部最优未必导致全局最优,需要严格证明

4. 解题思路的培养
面对贪心问题,我总结出了一套较为有效的思路:
- 首先尝试最直观的贪心策略
- 立即寻找可能的反例
- 如果找不到反例,再着手证明
- 证明失败时及时调整思路

5. 更深层的思考
贪心算法不仅仅是一种解题方法,更是一种思维方式。它教会我们:
- 复杂问题可能有简单的解决方案
- 局部决策的重要性
- 算法的正确性需要严格证明
- 反例思维的重要性

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

434

社区成员

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

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