美文网首页
贪心算法+回溯算法

贪心算法+回溯算法

作者: Moonsmile | 来源:发表于2016-12-31 21:48 被阅读0次

贪心算法

先来比较一下贪心算法和动态规划

贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择,不考虑整体,只考虑局部最优,所以它不一定能得到最优解;


动态规划则是每个步骤都要进行一次选择,但选择通常要依赖子问题的解,所以它是考虑整体的,由于通常要依赖子问题的解,所以一般选自自底向上自带备忘的机制,所以一定是最优解;


最优子结构的概念


如果一个问题的解包含其子问题的最优解,则称该问题具有最优子结构,也就是求解大问题的解,是通过求解小问题取解决
如果理解了最优子结构,则会发现贪心算法和动态规划都利用了最优子结构的性质

实现该算法的过程

从问题的某一初始解出发

while 能朝给定总目标前进一步 do

求出可行解的一个解元素

由所有解元素组合成问题的一个可行解

典型的可用贪心来解的问题有

最小生成树、分数背包问题(类似0-1背包问题,只不过可以取物体的一部分)

用分数背包问题举个例子

W=30(所选物体不能超过30)

物品:A B C

重量:20 5  20

价值:40 20 20
这个时候的贪心选择肯定是选择单位价值量最高的


所以先选择B,再选择A 
再从C中选择5  
这时价值肯定最大


但贪心算法一开始就说了,并不保证最优解,所以有时会配合随机算法(算法导论第三版第五章有讲)使用 
一般来说贪心算法的代码比动态规划简单的多


回溯算法

回溯法概念

通常采取深度遍历的形式,按照某种规则的能够避免某些不必要搜索的穷举式搜索

解空间(所有解的集合)

可以组织成一棵解集合的树

解集合树中的节点分为几种

扩展节点

在当前的扩展结点处,搜索向纵深方向移至一个新结点。这个结点就成为一个新的活结点,并成为当前扩展结点。

死节点

如果在当前的扩展结点处不能再向纵深方向移动,则当前的扩展结点就成为死结点,此时应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点,用这种方式递归地在解空间中搜索,直至找到所要求的解或解空间中已无活结点为止

典型问题

货担郎问题(TSP问题)

设某售货员要到若干城市去推销商品,已知各城市之间的路程(或路费)。他要选定一条从驻地出发,经过每个城市一遍,最后回到驻地的路线,使总的路程最小。

这是解集合树(具体怎么解决这个问题,再分子界限算法中解决,这里只是介绍回溯法本身)

利用回溯法解决该类问题步骤

1、针对所给问题,定义问题的解空间;

2、确定易于搜索的解空间结构;

3、以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

常用剪枝函数(这里明白概念就行,具体在分支界限算法讲)

用约束函数在扩展结点处剪去不满足约束的子树;

用限界函数剪去得不到最优解的子树。

具体例子,0-1背包问题和TSP问题,将在下一章结合分支界限介绍,这章只介绍概念

相关文章

  • 一位算法工程师的自我修养

    数据结构与算法 基本算法思想动态规划贪心算法回溯算法分治算法枚举算法 算法基础 时间复杂度 空间复杂度 最大复杂度...

  • 高级算法设计与分析

    目录 算法基础 算法复杂性 递归与分治 回溯法与分支限界法 贪心算法 动态规划法 NP问题 概率算法 现代优化算法...

  • 贪心算法+回溯算法

    贪心算法 先来比较一下贪心算法和动态规划 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择,不考虑整体,...

  • 算法汇总

    关于算法: 基础技巧:分治、二分、贪心排序算法:快速排序、归并排序、计数排序搜索算法:回溯、递归、深度优先遍历,广...

  • 回溯算法

    回溯算法 回溯算法介绍   回溯算法并不是非常复杂的算法, 很多人接触过但是未必知道这是回溯算法; 典型的回溯算法...

  • 算法与数据结构

    五大常用算法之一:分治算法 五大常用算法之二:动态规划算法 五大常用算法之三:贪心算法 五大常用算法之四:回溯法 ...

  • 算法与数据结构简介

    0x01 算法 基础技巧:分治、二分、贪心 排序算法:快速排序、归并排序、计数排序 搜索算法:回溯、递归、深度优先...

  • 马踏棋盘java实现 详解注释

    最近对算法方面有点兴趣马踏棋盘有用到贪心算法 回溯算法 回溯是当前棋盘状态 54时下一步已经没地方了 马儿踏完整...

  • 数据结构与算法简述(下)

    目录: 算法简介 排序算法 递归与穷举 贪心与分治 动态规划和回溯 1.算法简介 解题方案的准确而完整的描述,是一...

  • 常用几种算法

    贪心,分治,回溯,动态规划四种算法。 贪心算法 场景:我们有m个糖果和n个孩子,现在要把糖果分给这些孩子吃,但是糖...

网友评论

      本文标题:贪心算法+回溯算法

      本文链接:https://www.haomeiwen.com/subject/scrbvttx.html