分治法、动态规划、贪心算法看法

        蛮久没有给自己的博客添加点东西了,今天还是认真地写一篇吧。这个学期认真地学习了《算法设计与分析基础》这个课程,也认真地准备了软件设计师的考试,就在上星期六考了,感觉一般,希望过吧。正是这两件事让我这学期对算法有了比以前深刻的理解与认识,虽然现在还是菜鸟一名,但是有想法还是应该写出来,记录一下也好,让路过的大家点评一下也好。

        当老师一开始讲动态规划的时候,他就给我们讲了分治法与动态规划的区别,只是那时我随随便便地做了笔记,并没有好好理解那句话的意思。“分治法:各子问题独立   动态规划:各子问题重叠”这么简单的一句话而已。后来我通过对比它们之间的一些算法,算是搞明白了这话是啥意思了。举一个例子吧,一个大厨要参加一场厨神大赛,为了可以赢得这场比赛,他希望可以收集到他打算参赛的菜式的所有原材料,然后他列出了一份单子叫他两个徒弟去找这些材料。因为时间紧迫而且原材料又分别在很多不同的地方,他们只好又分别托当地的朋友去找那个材料,就是这样分开地找,分开地托人帮忙,最好就在很短的时间内找齐了原材料。这个过程,其实就是用了分治法的思想,一个一个子问题托人去解决,最后就把问题解决了。那如果是动态规划呢?动态规划是旨在得到最优解,不能像分治法那样简简单单完成问题就没事了,它还要考虑每个阶段的子问题是否影响到后面的最优解。再拿这个厨师例子的徒弟那个环节吧,徒弟们分别叫朋友帮他们找当地性价比最好的那个材料,记得哦,是最好的啊。而他们的朋友都会用本子记住当地的材料的详细资料,列好清单告诉徒弟,经过徒弟的确定就去选购最适合的那个材料。逐步完善,逐步最优。这里体现了动态规划的一个特别,那就是把子问题的解记录在表中,到时择优选择。总而言之,动态规划的每个阶段子问题都会影响后面阶段的优劣性,而分治法压根就不去考虑这么多。

       可能没有接触贪心算法的人,听到这么一个名词觉得会高深啊,我当时就这样,呵呵。后来才知道贪心算法其实就是很普通的一个想法,比如你找钱给小卖部老板,我们大部分都是先去拿最大面额的那张(千万别有50也要拿张100给别人找啊~),然后逐步添加面额较小的纸币。这样的思想已经在我们平时生活有一定的体现了。贪心算法可以找到令你满意的解答,但不一定是最优的解答。而动态规划则是去找最优的解答,这可以说是最本质的区别了。因为有时你用贪心算法这样的思想去解决问题不一定是最适合的,可能不需要从最大或者最小那部分开始添加。但它可以保证快速给你找到一个满意的答案。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值