标签:算法 概率 random
有1,2,3,......无穷个格子,你从1号格子出发,每次1/2概率向前跳一格,1/2概率向前跳两格,走到格子编号为4的倍数时结束,结束时期望走的步数为____。
这个问题,很显然考察的是递归问题:
定义step(i,j)为第i号格子带第j号格子的期望值;
step(1,4)为从第一格跳到第四格的期望,要到第四格,则只能先到第二格(期望0.5*(step(1,2)+1))或者是第三格(期望0.5*(step(1,3)+1));其中1表示到达第2格或者第3个之后,跳到第4格还需要1步。
故有
step(1,4)=0.5*(step(1,2)+1)+0.5*(step(1,3)+1)=1+0.5*(step(1,2)+step(1,3))
同理有
step(1,3)=1+0.5*step(1,1)+0.5*step(1,2)
step(1,2)=1+0.5*step(1,1)+0.5*step(1,4)
step(1,1)=0
联立方程,得到
step(1,4)期望为18/5,选E。
也可以用计算机求概率,如:
/**
* 项目名称:
* 文件说明:
* 主要特点:
* 版本号:1.0
* 制作人:lcx
* 创建时间:2015-8-25
**/
/**
* @author lcx
*
*/
public class PaceTest {
static Random rand=new Random();
public static int pace()
{
return (int) (rand.nextDouble()*2+1);
}
public static void main(String[] args) {
double sum=0;
int times=10000;//实验10000次
for(int i=0;i<times;i++)
{
int index=1;
int pace=0;
while(index%4!=0)
{
index+=pace();
pace++;
}
sum+=pace;
}
System.out.println("期望值为: "+sum/times);
}
}
追问1,若本题是从2开始,则期望多少?
同样的方法:
step(2,4)=1+0.5*step(3,4)
step(2,3)=0.5+0.5*(1+step(2,1))
step(2,1)=1+0.5*step(2,3)+0.5*step(2,4)
step(2,2)=0
最终求出
step(2,4)=12/5
追问2,若本题是3的倍数就停止,则期望为多少?
同样方法计算,期望值为2。
本题归根到底是利用递归思想。类似的题目还有青蛙跳问题、摆瓷砖问题(编程之美)等。
版权声明:本文为博主原创文章,未经博主允许不得转载。
跳格子问题——阿里笔试
标签:算法 概率 random
原文地址:http://blog.csdn.net/u011680348/article/details/47973185