算法分析与设计——贪心法
来源:互联网 发布:厦门软件著作权申请 编辑:程序博客网 时间:2024/06/08 10:08
贪心算法,只在乎眼前利益,只做出在当前看来最好的选择。也就是说贪心算法不从整体最优考虑,它所做出的选择只是在某种意义上的局部最优选择。
当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。
我们看一个找硬币的例子。假设有四种硬币,它们的面值分别为:2角5分,1角,5分,1分。现在要找给顾客6角3分。怎样找使得给顾客的硬币最少。
我们下意识地使用了这样的找硬币算法:首先选出一个不超过6角3分的最大硬币,然后,从6角3分中减去,再在剩余的值中选出一个不超过该值的最大硬币,如此反复,直到找够为止。这个找硬币的算法就是贪心选择算法。
如果上述问题改为:要找给顾客1角5分,硬币的面值分别为:1角1分,5分和1分。这时用贪心算法,给顾客找的情况是:一个1角1分和四个1分。而找三个5分为最优找法。故贪心算法不是对所有问题都能得到整体最优解。
对于一个具体的问题,怎么知道是否可用贪心算法解此问题,以及能否得到问题的最优解呢?这个问题很难给予肯定的回答。但是,从许多可以用贪心算法求解的问题中看到这类问题一般具有2个重要的性质:贪心选择性质和最优子结构性质。
基本思想:从问题的某一初始解出发,在每一阶段都根据贪心侧罗来做出当前最优的决策,逐步逼近给定的目标,尽可能快的求得更好的解。当达到算法中的某一步不能再继续 前进时,算法终止。
从思想中推出结论:
1、每个阶段,贪心法都会做出对眼前来讲最有利的选择。
2、选择一旦做出,不能更改。不允许回溯。
3、根据贪心策略来逐步构造问题的解。
贪心法的基本要素:
最优子结构性质:一个问题的最优解一定包含其子结构的最优解。
贪心选择性质:所求问题的整体最优解可以通过一系列局部最优的选择获得,即通过一系列的逐步局部最优选择使得最终的选择方案是全局最优的。
- 算法分析与设计——贪心法
- 算法设计与分析之贪心法
- 贪心算法(算法分析与设计)
- 算法分析与设计之五大常用算法 (III)—— 贪心算法
- 算法设计与分析入门篇----贪心法1
- 算法设计与分析入门篇----贪心法3
- 算法设计与分析入门篇----贪心法2
- 算法与设计分析作业3(贪心)
- 算法设计与分析 普通背包 贪心
- 算法设计与分析复习(二):算法设计策略-贪心法
- 【算法设计与分析】8、哈弗曼编码,贪心算法实现
- 算法分析与设计复习-贪心算法描述
- 算法分析与设计-15-背包问题的贪心算法
- 算法设计与分析 活动安排 贪心算法
- 算法设计与分析(三)之贪心算法
- 算法设计与分析[贪心]-汽车加油问题
- 区间相交问题(贪心)-算法设计与分析
- 汽车加油问题(贪心)-算法设计与分析
- Kali第一次Wireshark打开报错
- 机器学习基石-06-1-Restriction of Break Point
- JDBC链接数据库
- 进程,主线程,异步线程,多线程和runloop的作用和关系
- 超级账本Hyperledger-Fabric本地编译与安装(来源于区块链-原理、设计与应用)
- 算法分析与设计——贪心法
- Android Back键与Home键的监听
- Java中把对象、对象bean、list集合、对象数组、Map和Set以及字符串转换成Json
- spring boot Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration
- Unity3d 机试题目 坦克大战总结
- LeetCode 538. Convert BST to Greater Tree
- MySQL的别名
- 类:实验3共饮同井水
- Java程序9 X 9乘法表(补:第二种方法:递归算法实现99乘法表|再补:解析递归算法)