以前的算法对于所有合理的输入都给出正确的输出,概率算法将这一条件放宽,把随机性的选择加入到算法中。在算法执行某些步骤时,可以随机地选择下一步该如何进行,同时允许结果以较小的概率出现错误,并以此为代价,获得算法运行时间的大幅度减少。
概率算法的一个基本特征是对所求解问题的同一实例用同一概率算法求解两次,可能得到完全不同的效果。甚至两次的结果会有相当大的差别。
如果一个问题没有有效的确定性算法可以在一个合理的时间内给出解,但是该问题能接受小概率错误,那么采用概率算法就可以快速找到这个问题的解。
一般情况下,概率算法的基本特征为:
- 概率算法的输入包括两部分,一部分是原问题的输入,另一部分是一个供算法进行随机选择的随机数序列。
- 概率算法在运行过程中,包括一处或多处随机选择,根据随机值来决定算法的运行路径。
- 概率算法的结果不能保证一定是正确的,但能限制其出错概率。
- 概率算法在不同的运行过程中,对于相同的输入实例可以有不同的结果,因此,对于相同的输入实例,概率算法的执行时间可能不同。
概率算法的分类:
- 数值概率算法
常用于数值问题的求解。这类算法得到的往往是近似解,且近似解的精度随计算时间的增加不断提高。 - 蒙特卡罗算法
用于求问题的精确解。求得的解不一定是正确解,但是求得正确解的概率依赖于算法所用的时间。 - 拉斯维加斯算法
用拉斯维加斯算法找到的一个解,一定是正确解。对于所求解问题的任一实例,用同一拉斯维加斯算法反复对该实例求解足够多次,可使求解失效的概率任意小。 - 舍伍德算法
总能求得问题的一个解,且所求得的解总是正确的。