c++算法之贪心
来源:互联网 发布:linux安装网站安全狗 编辑:程序博客网 时间:2024/05/17 20:34
一、基本概念
- 什么是贪心算法:
贪心算法(又称贪婪算法,GreedyAlgorithm)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。 - 基本思路
(1)把求解的问题分成若干个子问题。
(2)对每一子问题求解,得到子问题的局部最优解。
(3)把子问题的解局部最优解合成原来解问题的一个解。 - 算法实现。
(1)从问题的某个初始解出发。
(2)采用循环语句,当可以向求解目标前进一步时,就根据局部最优策 略,得到一个部分解,缩小问题的范围或规模。
(3)将所有部分解综合起来,得到问题的最终解。
二、贪心方法的基本思想
贪心是一种解题策略,也是一种解题思想 使用贪心方法需要注意局部最优与全局最优的关系,选择当前状态的局部最优并不一定能推导出问题的全局最优
利用贪心策略解题,需要解决两个问题: 该题是否适合于用贪心策略求解 如何选择贪心标准,以得到问题的最优解
三、贪心法的特点
1.贪心选择性质:算法中每一步选择都是当前看似最佳的选择,这种选择依赖于已做出的选择,但不依赖于未做的选择。
2.最优子结构性质:算法中每一次都取得了最优解(即局部最优解),要保证最后的结果最优,则必须满足全局最优解包含局部最优解。
但并不是所有具有最优子结构的问题都可以用贪心策略求解。因为贪心往往是盲目的,需要使用更理性的方法——动态规划(例如“0-1背包问题”与“部分背包问题”)
四、贪心策略与其他算法的区别
1.贪心与递推:与递推不同的是,贪心法中推进的每一步不是依据某一固定的递推式,而是当前看似最佳的贪心决策,不断的将问题归纳为更加小的相似的子问题。所以归纳、分析、选择正确合适的贪心策略,是正确解决贪心问题的关键。
2.贪心与动态规划:与动态规划不同的是,贪心是鼠目寸光;动态规划是统揽全局。
阅读全文
0 0
- C语言之贪心算法
- c/c++算法之贪心与DP
- C语言贪心算法之过河问题
- C语言贪心算法之找点
- C语言贪心算法之非洲小孩
- 贪心算法之装箱问题(c++)
- 贪心算法之贪心的c小加问题
- 算法之贪心算法
- 算法之贪心算法
- C语言贪心算法
- 【C】贪心算法
- 贪心算法C
- 贪心算法之哈夫曼编码(C语言实现)
- C语言之贪心算法(背包问题)
- C语言贪心算法之会议安排问题
- C语言贪心算法之喷水装置(二)
- 贪心算法之找钱
- 贪心算法之Dijkstra
- 关于js中,原型对象,原型链,构造函数,实例之间关系的理解与区别
- vs2017无法查找或打开 pdb 文件
- 注解开发示例
- get和post方式提交中文乱码问题
- 牛客网---2016---去哪儿5-血型遗传检测
- c++算法之贪心
- SpringMvc 解决静态 页面的方法
- win10 文件夹背景 win10教程
- 四元数&MPU9250
- Java 开发环境配置(Windows篇)
- MyBatis集成log4j
- oracle 学习笔记
- xv6进程调度代码
- 北京大学并非净土,北大方正便是明证