浅谈动态规划法与贪心法和回溯法的联系
来源:互联网 发布:dvi线和vga线的端口 编辑:程序博客网 时间:2024/05/19 15:44
今天在建模的时候又回头看了看自己的算法课本,真是温故而知新。这里,我主要想从树的角度来探讨一下这三类算法。
首先我想说的是,当你看到一个算法的时候,脑子里必须要有一个实例立马出现,这样才说明你对这个算法算是有点掌握,否则看到一个算法的时候,乱七八糟的算法一下子都出来了,那么说明你并没有很好的理解这些算法,而是把他们搅在一起了。
那么看到这三种算法,你应该有所出现:
贪心法是动态规划法的特例,如0-1背包,最小代价生成树(prim算法和cruskal算法),huffman算法,以及地杰斯特拉算法。
动态规划法是一种方法,注意和算法的区别。如多段图问题,备忘录方法,弗洛伊德算法,最长公共子序列问题
回溯法是比动态规划法更加一般的算法,如n皇后,子集和数问题
那么,这三种有什么区别呢?
首先,这些方法所要解决的问题,一般都是决策问题。而贪心法一般是来求解最优问题的,而且他们其实都是在对问题的状态空间树进行搜索,在这个状态空间树中搜索最佳的路径以便求出最优策略。而贪心法是从上到下只进行深度搜索的,也就是说它是一口气走到黑的,一口气吃成胖子的,它的代价取决于子问题的数目,也就是树的高度,每次在当前问题的状态上作出的选择都是1,也就是说,它其实是不进行广度搜索的,这也造成了它的一个缺点:它得出的解不一定是最优解,很有可能是近似最优解。而动态规划法在最优子结构的前提下,从状态空间树的叶子节点开始向上进行搜索,并且在每一步都根据叶子节点的当前问题的状况作出选择,从而作出最优决策,所以她的代价就是子问题的个数和可选择的数目,所以它求出的解一定是最优解。回溯法是从上到下进行深度搜索,如果深度搜索没有进行到底而不满足决策函数了,那么不好意思,请回去,然后再从最近的可以岔开的地方选择另一条路,继续之前的深度搜索,如果搜索到底,那么再通过for循环进行广度搜索。所以它也是深度搜索和广度搜索并行的。求出的解也一定是最优解。
- 浅谈动态规划法与贪心法和回溯法的联系
- 浅谈动态规划法与贪心法和回溯法的联系
- 动态规划和回溯法的异同
- 【动态规划】【贪心】动态规划与贪心的联系
- 动态规划与分治法的区别和联系
- 浅谈动态规划,贪婪,回溯算法联系
- 贪心法与动态规划
- 分治,动态规划,贪心,回溯法,分支界限法
- 贪心法和动态规划
- 五类常见算法小记 (递归与分治,动态规划,贪心,回溯,分支界限法)
- 动态规划与贪心算法的区别与联系
- 动态规划与贪心算法的区别与联系
- 分治法、动态规划与贪心算法
- 动态规划、分治法与贪心算法的区别
- 动态规划、分治法与贪心算法的区别
- 动态规划、分治法与贪心算法的区别
- 贪心法,分治法和动态规划
- 复习五大算法:分治法、动态规划算法、贪心算法、回溯法和分支限界法
- O(logn)时间复杂度求Fibonacci数列
- 分治法--用C++实现合并排序
- yii 屏蔽错误提示
- 通过FFmpeg将多媒体文件解码后保存成Bmp图像(YUV420 RGB32)
- 自动kill掉超时的mysql show processlist进程
- 浅谈动态规划法与贪心法和回溯法的联系
- python语言中,对于cursor的查询明明有结果,为什么print cursor.rowcount结果为-1?
- Spring 定时器的时间设置规则
- php判断str是否是xml格式
- /usr/local/php/bin/phpize 时出错 : warning: AC_CACHE_VAL(pdo_inc_path, ...): suspicious cache-id, must
- C# xml模糊查询的实现
- Hive partition 分区表
- yii添加字段后model及视图修改
- android线程池