👉看了一大堆博客才搞清楚,并没有很高深,用通俗的话整理一下:
- 随机算法其实就是在求解的过程中引入了随机数来得到问题的答案。
- 因为随机,所以对于同一次输入每次运行都可以有不同的结果,不同的运行时间
👉主要分为四大类(用例子来说明):
- 数值概率算法
投点来估计某面积的大小(精度不断提高) - 比如伍德(Sherwood)算法
快速排序中的划分中介(划分标准)由随机数产生
准确解,但不知道是否正确 - 蒙特卡洛(Monte Carlo)算法
拿到一堆苹果中最大的一个(近似最优解)
尽量找,但不一定最好 - 拉斯维加斯(Las Vegas)算法中
拿到一堆钥匙中能开锁的一个(有机会得到最优解)
一定为正确解,但不一定找得到
具体的代码应用可能以后用到的话会更
四大类的概念可以看别的博客,都有很详细
还有两个小例子👇:
- 想到之前用遗传算法求解迷宫最短路径之中生成初代和变异等等过程其实都用到了随机算法
- 机器下棋的算法本质都是搜索树,其中围棋是搜索树最复杂的,可能的情况最多的一种,树宽达到了几百,(国际象棋只有几十),并且每一个子的价值相同,更加不容易计算(象棋不同的子会有不同的价值,更容易设定评价体系)。
采用遍历的情况根本不可能,基本上都是随机采样的方法。MCTS(蒙特卡罗搜树)的应用使得搜素深度(往后看的步数)大大增加。
AlphaGo就用基于蒙特卡洛搜索树和深度神经网络。