算法期末复习——随机算法
一边准备秋招还要一边准备期末考试,苦逼啊~
随机算法
随机算法简介
通过概率和统计方法在算法执行过程中对于下一计算步骤作出随机选择来求解问题。这也表明随机算法的解、时间复杂度具有随机性,结果是否正确也具有随机性。
随机算法的好处:
- 实现上比较简单
- 如果对应问题的非随机算法时间复杂度高,使用随机算法或许可以降低时间复杂度(但是不一定得到100%正确的解)
随机算法分类
- Las Vegas算法
- Monte Carlo算法
- Sherwood算法
Las Vegas
算法可能找不到解,但一旦找到一个解, 该解一定是正确的。算法得到解的概率与算法执行时间成正比。因此算法运行时间是随机的。
例子:N皇后问题、lazy_select
Monte Carlo
可能给出错误解,但是算法得到正确解的概率与算法执行时间成正比。通常可以通过设计,使得该算法以较高概率给出正确解。
如果给出正确解概率为p(1>p>0.5),称为算法为p正确。易见,对于一个p正确的一致Monte Carlo算法,只要反复执行多次,统计出现概率较高的解作为最终解,就可以迅速提高获得正确解的概率。
因此算法单次执行运行时间是固定的,通过反复调用Monte Carlo算法就可以迅速提高获得正确解概率。
例子:素数测试、Max3-CNF问题
Sherwood
一定能得到正确解,通常用于消除确定性算法中平均复杂性与最坏复杂性的差异。
例子:随机快排
数学工具
数学期望与方差
主要注意期望的线性性质,可以用来设计随机变量简化计算。

尾概率界Tail Bound
指随机变量大于某值的概率,如下图ε:

Markov不等式
主要用于描述一个随机变量的尾概率与随机变量的期望E(x)之间的关系。
Chebyshev不等式
主要用于描述一个随机变量尾概率与随机变量的方差D(x)之间的关系。
关于为什么要使用以上两个不等式:
有的时候,直接根据概率分布来计算尾概率比较繁琐,在已知数据统计特征的情况下,以上两个不等式给出了较为容易计算尾概率上界的方法,在解决实际问题的时候比较方便(虽然结果可能并不十分精确)。
Chernoff界
主要是对n次泊松实验形成的判定为正的随机变量的尾概率进行分析,比n次伯努利实验适用范围更广,且结果较为精确。

随机数值算法
首先说一下,习惯上通常把随机数值算法作为一个单列的部分,不分入以上三类随机算法。
随机数值算法主要是用于输出一个近似解用于数值问题求解,执行时间越长精确程度越高。(我个人理解随机数值算法属于中途强制停止的Las Vegas算法)
两个例子:随机投针法计算pi值、平均值法计算定积分
几个典型随机算法
随机选择算法LazySelect
求第k大数字
随机最小割算法Karger's Algorithm
随机快速排序
素数测试
参考资料
- 课程ppt
- 算法分析与设计 王晓东
- http://tcs.nju.edu.cn/wiki/index.php/%E9%9A%8F%E6%9C%BA%E7%AE%97%E6%B3%95_(Fall_2011)
- https://upupming.site/2019/03/20/las-vegas-monte-carlo-yao-etc/

浙公网安备 33010602011771号