动态规划与贪心算法比较
动态规划和贪心算法比较
动态规划:
动态规划一般分为线性动规、区域动规、树形动规、背包动规四类
动态规划程序设计师是对解最优化问题的一种途径、一种方法,而不是一种特殊的算法,并不是一个标准的数学表达式和明确清晰的解题方法。往往针对一种最优化问题,问题的性质不同,确定优化的条件也不同,所以就有不同的动态规划解题方法。
基本思想:
动态规划通常求解具有某种最优性质问题,找到最优解。动态规划与分支法类似,器基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
与分治法不同的是,动态规划求解的问题,经分解得到的子问题不是相互独立的;而分治法求解的问题,分解得到的子问题数目太多,有些问题被重复计算量很多次。
如果我们能够保存已解决的子问题的答案,而在需要时找到此答案,这样就可以避免大量的重复计算,节省时间。这样就可以使用一个表来记录所有已解的子问题的答案,不管子问题以后是否被用到,只要他被计算过,就将其结果填入表汇总,这就是动态规划的基本思路。
基本概念:
多阶段决策问题:
如果一类活动过程可以分为若干互相联系的阶段,在每一个阶段都需要作出决策(采取措施),一个阶段的决策会影响到下一个阶段的决策,从而就完全确定了一个过程的活动路线,则称它为多阶段决策问题。
经典例题有:
1.硬币找零
扩展1:单路取苹果
扩展2:装配线调度
2.字符串相似度/编辑距离(edit distance)
应用1:子串匹配
应用2:最长公共子序列
3.最长公共子序列(Longest Common Subsequence,lcs)
扩展1:输出所有lcs
扩展2:通过LCS获得最长递增自子序列
4.最长递增子序列(Longest Increasing Subsequence,lis)
扩展:求解lis的加速
5.最大连续子序列和/积
扩展1:正浮点数数组求最大连续子序列积
扩展2:任意浮点数数组求最大连续子序列积
6.矩阵链乘法
扩展:矩阵链乘法的备忘录解法(伪码)
7.0-1背包问题
8.有代价的最短路径
9.瓷砖覆盖(状态压缩DP)
10.工作量划分
11.三路取苹果
贪心算法:
贪心算法greedy algorithm是指在对问题求解是,总是做出在当前最好的选择,也就是说,不从整体最优上加以考虑,他所做出仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广范的许多问题他也能产生整体最优解或者是整体最优解的近似解。
基本概念:
贪心算法是一种对某些问题求最优解问题的更简单、更迅速的技术。使用此算法的特点是一步步地进行,对当前情况作出最优选择,,而不考虑各种可能的整体情况;
它省去了为找最优解要穷尽所有可能而必须消耗的大量时间,采用自顶向上,以迭代的方法作出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题,通过进一步贪心选择可得到问题的最优解,每一步能够保证局部最优,但是不一定是整体最优
经典例题:
0-1背包问题
活动安排
最优装船问题
均分纸牌
最大整数
找零钱问题
贪心算法当然也有正确的时候。求最小生成树的Prim算法和Kruskal算法都是漂亮的贪心算法。
贪心法的应用算法有Dijkstra的单源最短路径和Chvatal的贪心集合覆盖启发式
动态规划和贪心算法的异同:
动态规划和贪心算法都是一种递推算法
均有局部最优解来推导全局最优解
不同点:
贪心算法:
1.贪心算法中,作出的每步贪心决策都无法改变,因为贪心策略是由上一步的最优解推导下一步的最优解,而上一部之前的最优解则不作保留。
2.贪心法正确的条件是:每一步的最优解一定包含上一步的最优解。
动态规划算法:
1.全局最优解中一定包含某个局部最优解,但不一定包含前一个局部最优解,因此需要记录之前的所有最优解
2.动态规划的关键是状态转移方程,即如何由以求出的局部最优解来推导全局最优解
3.边界条件:即最简单的,可以直接得出的局部最优解
动态规划与贪心算法比较相关推荐
- 53. 最大子序和 golang (动态规划与贪心算法)
题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续 ...
- 活动安排问题的 动态规划和贪心算法
这篇文章主要用来记录我对<算法导论> 贪心算法一章中的"活动选择问题"的动态规划求解和贪心算法求解 的思路和理解. 主要涉及到以下几个方面的内容: ①什么是活动选择问题 ...
- 从 活动选择问题 看动态规划和贪心算法的区别与联系
这篇文章主要用来记录我对<算法导论> 贪心算法一章中的"活动选择问题"的动态规划求解和贪心算法求解 的思路和理解. 主要涉及到以下几个方面的内容: ①什么是活动选择问题 ...
- (转)动态规划和贪心算法的区别
(转自)http://hi.baidu.com/35661327/blog/item/d5463e17f1e8d011972b439c.html 动态规划和贪心算法的区别 2009-07-27 13: ...
- 动态规划法和贪心算法
动态规划法和贪心算法 csdn第一篇blog. 先说说写文章的好处: 第一,写文章是个学习的过程.写的过程中随着自己的思路的进行,会出现理解不清楚的地方,自然就会翻书或者google的搞明白. 第二, ...
- 分治法、动态规划、贪心算法区别
联系 分治.动态规划.贪心算法都是把一个大的问题给分解成子问题,通过解决子问题来最终解决原问题的. 区别 分治: 子问题不重复时候更适合,重复也能用,效率低,最好动态规划. 动态规划: 重复的公共子问 ...
- 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。
十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...
- 算法学习--动态规划与贪心算法
动态规划与贪心算法都是一种递推算法,都是用局部最优解来推导全局最优解:是对遍历解空间的一种优化:当问题具有最优子结构时,可以用动态规划来解决,而贪心算法是动态规划的特例 动态规划 1. 动态规划的思想 ...
- 算法基础课第八章动态规划和贪心算法
动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程.20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时, ...
最新文章
- 在CentOS 7.7 x86_64上安装python3的selenium 3模块实录
- 前端学习(2859):简单秒杀系统学习之前端界面布局
- Python——itertools.chain.from_iterable将多个迭代器连接成一个统一的迭代器的最高效的方法
- 语音识别概念午后大跌 语音识别概念股一览表
- java 类加载器卸载,【深入明白Java虚拟机 】类加载器的命名空间以及类的卸载...
- SiteMesh框架
- 微信小程序开发系列 (三) :微信小程序如何响应用户点击事件和微信平台 API 的使用方法介绍
- 计算机语言echo off什么意思,批处理文件的@echo off是什么意思?
- 设计模式优秀文章集合
- 从python爬虫以及数据可视化的角度来为大家呈现“227事件”后,肖战粉丝的数据图
- 一文说透企业风险管理的三大要素分别是什么
- CMake的使用例子
- 员工调职其他部门 公司百科帮大忙
- VS2017登陆失败:我们无法刷新此账户的凭证、我们无法添加此账户发送请求时出错、评估期已结束,请登录以解除产品锁定
- make XXX_defconfig 分析
- 第十一期 U-Boot介绍《路由器就是开发板》
- PI实时数据库接口技术的应用
- 微信小程序-总结心得
- 软碟通 ultraISO制作win10 uefi启动盘无法被电脑识别
- Python爬虫实战(四) :下载煎蛋网所有妹子照片
热门文章
- LoRa设备如何连接到腾讯云?
- Android跳转到应用商店的APP详情页面,以及 Google GMS 各个apk的包
- 打开IE浏览器后自动跳转到Edge浏览器怎么办
- macOS 平台有哪些好用的 SSH 客户端?
- 龙之信条一直显示连接服务器中,游戏新消息:龙之信条黑暗觉者官方直播20分钟实机演示...
- 希望整理 Android Studio 最全面的开发插件。
- python多态_Python 多态与抽象类
- http文件上传请求在ie浏览器中被挂起,在chrome中出现Provisional headers are shown
- Alibaba Dubbo or Apache Dubbo, 该如何做选择呢?
- python 中文字符串分割与拼接