“学习笔记”之《算法导论》----第四部分----高级设计和分析技术----第十六章----贪心算法

版权声明:未经博主允许,勿转载 https://blog.csdn.net/qq_34754836/article/details/86749703

本人大四即将结束,于2018年12月18日购《算法导论》这本书,慢慢看,第一阶段先主要理解各个章节说的算法都是什么意思,书上的课后习题先不做,用得上什么算法我再详细学习。这是官方课后答案的链接

放在开头:没有好的算法,坏的算法之说,重点是针对不同的情况,针对不同的数据,针对不同的需求,去选择算法,改良算法。我的数学功底不强,太难的公式我看不懂,太高深的思想我理解不了,我主要以应用为主,不以解释数学公式为主。

 贪心算法属于上一章动态算法的一种,但是比我们常规的动态算法设计步骤要更简单,更高效一些,有点像慕课上数据结构那门课讲的最长子数组。就是,乍一看不是最优解,但实际上就是最优解,而且很高效。

贪心算法原理

如何证明一个问题能用贪心算法解决,如同动态规划,贪心算法一样有使用条件:

1、贪心选择性质

我们通过做出局部最优选择来构建全局最优解,就是说我们从最开始选择子问题的解的时候,直接选择其中一个最优子方案就行,不必考虑每个子方案,然后在剩下的问题中(总问题中除去已经考虑的子问题),继续做最优选择,以此类推。这属于一个自顶向下的求解方式。

2、最优子结构

如果一个问题的最优解包含其子问题的最优解,则称子问题具有最优子结构性质。

0—1背包问题与分数背包问题

0-1背包问题:

一个小偷正在一个商店偷东西,发现了n个商品,第i个商品,价值vi美元,重wi克。这个小偷希望拿走价值最高的商品,但是他的背包最多装W克重的东西。他应该怎么拿商品呢?之所以叫0-1问题,小偷对一个商品要么拿(1),要么不拿(0)。

分数背包问题:

同上述问题大致一样,但不同的是,小偷可以拿一个整体商品的一部分,可以不全拿走,就好比商品是金砂。

两个问题虽然相似,但是贪心算法只试用分数背包问题。我们可以先计算每个商品的价值vi/wi。小偷首先尽量多的拿走每克最贵的商品,拿光了再拿第二高的商品,以此类推,直至商品达到上限W。

其他案例

1、构造赫夫曼编码树的问题:不是二叉搜索树,是一种根据字符出现频率,压缩文件大小的一种算法。

2、活动选择问题:有n个活动,想要用同一间教室,我们有每个活动的起止时间,怎么安排,进行活动的数量才能最多。

后面两节介绍的是拟阵,跟图算法相关联,看不懂。 

猜你喜欢

转载自blog.csdn.net/qq_34754836/article/details/86749703