随机算法:它在接受输入的同时,在算法中引入随机因素,通过随机数选择算法的下一步。
随机算法可理解成在时间,空间和精度上的一种的平衡。
常见的随机算法有:数值概率算法,蒙特卡罗算法,拉斯维加斯算法和含伍德算法。
数值概率算法常用于数值问题的求解。往往得到近似解,近似解的精度随着计算时间的增加不断提高。例如在计算Π的近似值时,我们可以在单位圆的外接正方形内随机撒n个点,设有k个点落在单位圆内,可以得到Π≈4*k/n。
蒙特卡罗算法可分为两类:一是蒙特卡罗判定:蒙特卡罗算法总是能给出问题的解,但是偶尔也可能会产生非正确的解。求得正确解的概率依赖于算法所用的时间。最常见的蒙特卡罗判定是Miller-Rabin素数测试和字符串匹配的Rabin-Karp算法。二是蒙特卡罗抽样:基本思想是对于所求的问题,通过试验的方法,通过大样本来模拟,得到这个随机变量的期望值,并用它作为问题的解。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解的过程。“模拟退火算法”就使用了蒙特卡罗抽样的思想。
拉斯维加斯算法不会得到不正确的解,但是有时候用拉斯维加斯算法可能找不到解。
含伍德算法总是能得到问题的一个解,且所求得得解总是正确的。当一个确定性算法在最坏情况下的计算复杂性与其在平均情况下的计算复杂性有较大差别时,可以在这个确定算法中引入随机性将它改造成一个含伍德算法,消除或减少问题的好坏实例之间的差别。含伍德算法精髓不是避免算法的最坏情况的发生,而是设法消除这种最坏行为与特定实例之间的关联性。含伍德算法最典型的应用就是快速排序的随机化实现,“随机增量算法”也是含伍德算法的一种应用。