贪心算法知识(一)
来源:互联网 发布:论坛自动签到软件 编辑:程序博客网 时间:2024/05/16 12:55
贪心算法具有最优子问题结构,它的特点是“短视”,每次选择对当前局面最有利的决策,来一步步获得最优解。
我个人认为,贪心不是一个具体的方法,而是一类方法,贪心算法的关键不在于想到,而在于正确性的证明。要证明一个贪心算法是正确的,需要证明我们可以把一个最优解逐步转化为我们用贪心算法所得到的解,而解不会更差,从而证明贪心算法得到的解和最优解是一样好的(显然,最优解不可能更好)。而要证明一个贪心算法是错误的,只需要找到一个反例就可以了。
通常情况下,证明贪心算法是正确的或者找到贪心算法的一个反例都不那么容易。
而且即使对于同一个问题,从不同角度的贪心算法的正确性也不尽相同。例如Dijkstra算法是著名的求单源图最短路径的贪心算法。
所以一般对于一个问题来说,我们只讲这样一个贪心算法是错误的,而不说这个问题不能采用贪心算法——因为可能从别的角度设计出的贪心算法是正确。
我个人认为,贪心不是一个具体的方法,而是一类方法,贪心算法的关键不在于想到,而在于正确性的证明。要证明一个贪心算法是正确的,需要证明我们可以把一个最优解逐步转化为我们用贪心算法所得到的解,而解不会更差,从而证明贪心算法得到的解和最优解是一样好的(显然,最优解不可能更好)。而要证明一个贪心算法是错误的,只需要找到一个反例就可以了。
通常情况下,证明贪心算法是正确的或者找到贪心算法的一个反例都不那么容易。
而且即使对于同一个问题,从不同角度的贪心算法的正确性也不尽相同。例如Dijkstra算法是著名的求单源图最短路径的贪心算法。
如果我们也给出一个贪心算法,从源头开始每次选择最短的边继续走,直到走到,直到经过全部点或者无路可走。按照我们的算法,在上图中,A到C的最短路是A-B-C,它的长度是5,显然A-D-C才是真正的最短路。我们的贪心算法是错的。
所以一般对于一个问题来说,我们只讲这样一个贪心算法是错误的,而不说这个问题不能采用贪心算法——因为可能从别的角度设计出的贪心算法是正确。
1 0
- 贪心算法知识(一)
- 贪心算法知识(二)
- 贪心算法(一)
- 贪心算法(一)
- 【贪心算法(一)】贪心算法基础
- 几个算法知识--贪心算法
- 一.贪心算法 喷水装置(一)
- NYoj-喷水装置(一)贪心算法
- 喷水装置(一)t贪心算法
- 贪心算法及相关题目(一)
- NYOJ 贪心算法题目汇总(一)
- 贪心算法--喷水装置(一)
- 贪心算法--寻找最大数(一)
- 贪心算法:喷水装置(一)
- 贪心算法——算法总结(一)
- 算法学习(贪心算法一)活动选择问题
- 数据结构及算法知识(一)
- 专题一总结 贪心算法
- 机器学习中的数据清洗与特征处理综述
- C#中CopyTo()和Clone()的区别
- 实现计算机功能
- 美团推荐算法实践
- 如何成为一个架构师
- 贪心算法知识(一)
- dfs实现迷宫
- 大数运算的加法和减法
- java对象之间相互循环引用实例
- hello objective-c
- highchart动态添加点,并改变点的颜色为红色
- UIViewAnimationOptions类型
- Java内存访问重排序的研究
- Android小程序-Walker注册页面校验(三)