首页 > 编程语言 > 详细

对于割木板问题贪心算法合理性的逆向理解

时间:2020-05-28 09:26:02      阅读:78      评论:0      收藏:0      [点我收藏+]

技术分享图片

 


 

  这是在某本竞赛书上看到的 一个比较简单的贪心算法题。

 

 

  书上采用了二叉树模型形象地呈现切割过程:

技术分享图片

 

 然后给出了这么一句话:

技术分享图片

 

(然后就开始哗啦哗啦写代码了)   

  冥冥之中还是能感受出这句话的合理之处。。。

  但是许多初步接触贪心算法的萌新可能突然就懵了:“兄弟。。节点···?为什么啊!兄dei!?。

  

 

  这里提供一个易于理解的思路:

  细心思考你就会发现,当切割结果确定后,切割次数确定了,所以说这个问题的本质就是如何调整切割策略,使得每次切割花费总和最小。。。

  不如咱们反过来想这个问题!

  它就变成了:有一堆切好的木板,每一次拼装和和切割的花费一致,如何确定拼装策略,使得总花费和最小。

  看似并没有改变什么本质的东西,但是它让你更接近对上图中最优切割的性质的理解。假如我们要拼装的话,既然总的拼装次数是一定的,那我们就尽量想办法让每一次的拼装操作花费最小(谈心的精髓思想) 。考虑到每一次拼装的花费=所拼装的两块木板长度和,那我们每一次拼装就尽量选取所有木板段子中最小的两个拼。于是咱们把这个拼装过程从下往上整合成二叉树,反过来从上到下就得到了最优分割策略的二叉树。

——于是!对于最优切割性质中“最短板是深度最大的子节点之一”和“最短板与次短板应当是兄弟节点”的阐述就豁然开朗了!

.

.

.

......了吧..

 

 

  

 

对于割木板问题贪心算法合理性的逆向理解

原文:https://www.cnblogs.com/fighlone/p/12977755.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!