概率算法

概率算法

第一节 概率算法的分类

数值概率算法

  • 求解近似解
  • 计算精度随计算时间增加而增加

Monte Carlo(蒙特卡罗)

  • 求解准确解(但是此解不一定是正确解)
  • 解是正确解的概率依赖算法所用时间,时间越长,概率越高

Las Vegas(拉斯维加斯)

  • 求解准确解(只要求出解,此解就一定是正确解,但是可能求不出解)
  • 求出解的概率依赖算法时间,时间越长,概率越大

Sherwood(舍伍德)

  • 求解准确解(此解定是正确解)
  • 此法不是避免算法的最坏情况,而是减少最坏情况和好情况的差距。适用于算法最坏情况和平均情况差距过大时。

第二节 随机数

  • 在计算机中无法产生真正的随机数,所以概率算法中使用的随机数在一定程度上是随机的,称为伪随机数。
  • 线性同余法是产生伪随机数最常用的办法。

第三节 数值概率算法

随机投点法求解Π的值

  • 圆的半径为r,外切正方形变长即为2r。则投点在圆上的概率为 Πr2/4r2 = Π/4。设向正方形投点次数为n,投入圆形内次数为k,则k/n = Π/4,可推 Π ≈ 4k/n。投点次数越多,Π的精确度越高。

随机投点法求解定积分

  • 与上述方法类似

Monte Carlo(蒙特卡罗)

  • 设p是一个实数,1/2 < p < 1,如果MC算法对于问题的任一实例得到正确解的概率>=p,则称该MC算法是p正确的,p-1/2为该算法的优势。
  • 如果对于同一实例,MC算法给出2个相同的正确解,则称此时的MC算法是一致的。
  • 代表问题:主元素问题,素数测试

Las Vegas(拉斯维加斯)

  • 求出的解必是正确解,但可能无解。
  • 一般用boolean型方法表示Las Vegas算法,lv算法找到解后返回true,否则false。x是输入参数,y是返回的解,success = true时,返回y,success = false时,表明没有找到解,对同一实例再次独立调用相同算法直到求出解。
public static void obstinate(Object x, Object y){
	boolean success = false;
	while(!success)	success = lv(x,y);
}
  • 代表问题:n后问题(回溯法)

Sherwood(舍伍德)

  • 核心思想是减少最坏和平均(准确说是特定实例)算法复杂度的差距。
  • 如随机化的快排;线性时间选择算法;跳跃表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值