码迷,mamicode.com
首页 > 其他好文 > 详细

跳格子问题——阿里笔试

时间:2015-08-25 12:02:28      阅读:304      评论:0      收藏:0      [点我收藏+]

标签:算法   概率   random   

有1,2,3,......无穷个格子,你从1号格子出发,每次1/2概率向前跳一格,1/2概率向前跳两格,走到格子编号为4的倍数时结束,结束时期望走的步数为____。
  • 2
  • 12/5
  • 14/5
  • 16/5
  • 18/5
  • 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!