读书人

求大神写个实验quot;三门有关问题quot;看下结果

发布时间: 2013-06-25 23:45:41 作者: rapoo

求大神写个实验"三门问题"看下结果.

http://baike.baidu.com/view/68669.htm

很出名的概率问题.
请看百度百科.
我对这个很感兴趣.
流言终结者 第九季 第21集也有做过实验.
求大神模拟跑一下看下结果.
[解决办法]
逻辑上是那样的没错啊。问题主要集中在如果最初选的是车的话,修改后肯定会后悔。这种后悔带来的痛苦远比你坚持羊所带来的后悔要深。主要还是考验人心啊。
[解决办法]
public static class 成功机会选择概率问题
{
const int Size = 3; //wall数
const int Award = 1; //奖品数

/// <summary>
/// 进行一次测试。
/// </summary>
/// <returns>返回两个bool结果:1. 如果不改变选择,是否猜中;2. 如果改变选择,是否猜中。</returns>
private static Tuple<bool, bool> testc()
{
var gates = (from n in Enumerable.Range(0, Size)
orderby Rnd.Next()
select n < Award).ToList();
var guess = Rnd.Next(0, Size); //首先猜测选择这个
int open = (from n in Enumerable.Range(0, Size)
where n != guess && !gates[n]
select n).First(); //选择这个门打开
int newGuess = (from n in Enumerable.Range(0, Size)
where n != guess && n != open
orderby Rnd.Next()
select n).First();
return new Tuple<bool, bool>(gates[guess], gates[newGuess]);
}

static Random Rnd = new Random();

static void t1()
{
var cn = 10000; //进行1万次反复测试
var game = Enumerable.Range(0, cn).Select(x => testc()).ToList();


var result1 = game.Count(x => x.Item1); //不改变决定成功次数
var result2 = game.Count(x => x.Item2); //改变决定成功次数
Debug.Assert(result2 > result1 + 3000);
}

}



执行 t1,你会发现断言通过了——没有异常!这就说明,如果修改决定,至少比坚持决定多3000次机会胜出。

不过这有前提。生活总是跟你使诈,并不一定有人给你正确地指出哪一个门后边是山羊。
[解决办法]
其实关键在于知情的主持人帮助排除了一个错误选项,这是巨大的帮助,而坚持最初选择的话相当于没有利用到这一帮助。
推广到极端情形就很清晰了:一万张彩票,其中一张有奖,我买一张,然后有人帮我把剩下的9998张无奖票全撕了,问我要不要换剩下的一张,如果我不换相当于没有用上他这一巨大的帮助

读书人网 >C#

热点推荐