常用算法

1. 穷举法

把每种可能性都一一举出,直到达到符合条件的结果或集合

视频:https://www.bilibili.com/video/av36794372

2. 贪婪算法

通过权重来推导结果,比如从价值P,或者从单位重量价值来推导。
局部的贪婪最优有时候并不是全局最优。

视频:https://www.bilibili.com/video/av8800450

3. 动态规划算法

要想用动态规划,首先要满足两个条件:重复子问题 和 最优子结构
每个父节点会组合子节点的解来得到这个父节点为跟的子树的最优解,所以存在最优子结构。
同一层的每个节点剩余的可选物品集合都是一样的,所以具有重复子问题
因此可以利用动态规划来解决问题。

当重复函数调用处理同一个值,并对应同一个结果,那么反复的调用,势必会消耗计算机的更多时间和性能,把这一过程中生成的值和处理的值一一对应,在进行重复处理的时候去检测是否有相同结果,然后进行选择使用结果值还是计算结果值。

视频:https://www.bilibili.com/video/av9117957
https://www.bilibili.com/video/av45990457

4. 分治法

分支限界法是广度优先算法
分治算法就是把一个困难的问题分解为一系列的子问题,这些子问题具有如下的特点:
1) 子问题比原问题更新解决
2) 子问题的解可以合并为原问题的解
先分割成最小组处理,再回退到更大的组中处理相同问题,分治排序速度时log2n, 非常高效

视频:https://www.bilibili.com/video/av17004931

5. 回溯算法

回溯算法是深度优先策略的典型应用,回溯算法就是沿着一条路向下走,如果此路不同了,则回溯到上一个
分岔路,在选一条路走,一直这样递归下去,直到遍历万所有的路径。八皇后问题是回溯算法的一个经典问题,还有一个经典的应用场景就是迷宫问题。

视频:https://www.bilibili.com/video/av50739524

举个例子

有一个4x4迷宫从入口A到出口B如何走?

  • 穷举法,将4x4所有可能组合列出来,从中选择从A点到B点最短的一组结果
  • 贪婪法,更适合给路径加权重,如果从入口向四周都可以走,但是权重是靠近B出口方向更低,路上有宝物的地方权重更低,这样得出的路径就是从A到B还搜集了宝物的路线
  • 动态规划,当迷宫是随机生成,并且对应每次生成的地形,每走一步都能得到同一个结果,那么就使用动态规划来保存这个结果并在适当的时候启用
  • 分治法,从出口和入口都向前延伸,遇到岔路就分别去探索,直到最终碰面,获得最佳路线,把它想象成火影里鸣人每到一个岔路口就使用一次影分身。
  • 回溯法,从入口出发,先走一个方向,当走到死胡同后退回一步,直到探索到出口为止,就像一只老鼠在不断的探索迷宫。

https://blog.csdn.net/changyuanchn/article/details/51429979

你可能感兴趣的:(常用算法)