您的位置:首页 > 其它

六种算法:递归与分支策略,动态规划,贪心算法,回溯法,分支限界法,随机化算法。

2018-08-11 10:52 344 查看

*

本次课程一共学习了六种算法,分别为:递归与分支策略,动态规划,贪心算法,回溯法,分支限界法,随机化算法。下面就我的理解谈谈我对各个算法的理解和学习体会。

1 递归与分治策略:

递归:
间接或直接地调用自身的算法称为递归算法
分治:
分治的基本思想是将一个规模为n的问题分解成k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归的解这些子问题,然后将各个子问题的解合并成原问题的解
分治法通常的计算效率:
{O(1) n=n0
T(n)<={
{kT(n/m)+f(n) n>n0
具体应用的例子:

  • 二分搜素
  • 大整数的乘法
  • Strassen矩阵乘法
  • 棋盘覆盖
  • 合并排序
  • 快速排序
  • 线性时间选择
  • 最接近对点问题
  • 循环赛日程表

2 动态规划

动态规划与分治法类似,其基本思想也是将待求问题分解成若干个子问题,先求出解的子问题,然后就从这些子问题的解得到原问题的解。与分治方法不同的是,适合于动态规划求解的问题,经分解得到的子问题往往不是相互独立的。
基本思想:
用一个来记录所有已解决的,不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中,在需要时再找出已求得的答案,避免大量的重复计算。
设计步骤:
(1) 找出最优解的性质,并刻画其结构特征。
(2) 递归地定义最优值
(3) 以自底向上的方式计算出最优值。
(4) 根据计算最优值时得到的信息,构造最优解。
算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。因此引入备忘录方法:备忘录方法是董涛规划法的变形,只不过备忘录方法的递归方式是向下的,动态规划算法则是自底向上递归的。
具体应用的例子:

  • 矩阵连乘问题

  • 最长公共子序列

  • 最大字段和

  • 凸多边形最优三角形部分

  • 多边形游戏

  • 图像压缩

  • 电路布线

  • 流水作业调度

  • 0-1背包问题

  • 最优二叉搜索树

**

3 贪心算法

**
贪心算法并不从整体上考虑,它所做出的选择只是在某种意义上的局部最优选择,它不是对所有的问题都能产生最优解,但对范围相当广的许多问题它能产生最优解。
可以用贪心算法解决的问题具有两个重要的性质贪心选择性质和最优子结构性质
贪心选择性质:
所求问题的最优解可以通过一系列局部最优的选择,即贪心选择来达到。
最优子结构性质:
当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。
具体应用的例子:

  • 0-1背包问题
  • 但愿最短路径

4 回溯法

用它可以梓潼的搜索一个问题的所有解或任一解,回溯法求问题的所有解时,要回溯到根,且根节点的所有子树都已被搜索遍才结束,回溯法求问题的一个解时,只要搜索到问题的一个解就可结束。适用于组合数较大的问题。
基本思想:
回溯法从根节点出发,以深度优先方式搜索整个解空间,如果当前扩展结点不能再向纵向方向移动,则当前扩展结点就成为死结点。此时往回移动至最近的一个活结点处,并使这个结点成为当前的扩展结点

5 分支限界法

分支限界法类似于回溯法,
区别:
(1)回溯法的求解目标是找出解空间中满足于约束条件的所有解;分支限界法是找出满足约束条件的一个解,或者某种意义上的最优解。
(2)回溯法以深度优先方式搜索解空间,分支界限法以广度优先或者最小耗费优先的方式搜索解空间
基本思想:
在扩展节点处,先生成其所有儿子节点,然后从当前的活节点表中选择下一个函数值,在每一个活节点处计算一个函数值(限界),并根据函数值从当前活节点表中选择一个最有利的节点作为扩展节点。(每个活节点只有一次机会成为扩展节点)

- 6 随机化算法

基本思想:
算法在执行过程中随机的选择下一个计算步骤
特征:同一实例用同一随机化算法可能得到不同的结果,得到的解往往是近似解。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐