确定性算法 & 随机算法的区别
随机算法的分类:
舍伍德算法:
避免某些情况的极端解而提出的先洗牌或随机选取来进行运算的算法。e.g.在快速排序算法中,若本身排序是有一定顺序导致用快排的方法,形成单支树,那么他的时间复杂度就为O(n^2),那么通过使用舍伍德随机算法就为了避免这种极端情况的存在,在快排的处理中,我们可采用每次随机选取数组中的元素来作为分界点,来避免极端情况的发生。
拉斯维加斯算法:
这个算法能够求解出正确解,他的核心思想十分简单,就是通过反复“验证”来证明这个问题的解是否正确。若是正确,则这个答案可信,但成功率不一定很高。
蒙特卡罗算法:
通过不断地验证来求解出得到解的正确答案的概率,求出的解不一定是正确解,但随着求解次数越多,他是正确解的可能性越大。e.g.素数的判定,由于费尔马小定理和二次探测定理都是充分条件,因此我们只能通过充分条件来排除不是素数的情况,也就是说若输出为非素数,则这个答案完全可信,但输出是素数,则这个答案有一定概率为正确答案,当实验次数足够多,采用更大的把握相信该答案的正确性。
计算机产生随机数的方法
计算机并不能产生真正意义上的随机数,因此我们称之为伪随机数,常用的产生随机数的方法为线性同余法