LanternD +

把不均匀硬币变成均匀的六面骰子

 

img

问题一

如何把一种不均匀的硬币变成均匀的硬币?

 啊哈,把两个硬币按头对尾的顺序粘在一起就可以实现了。

问题二

如何把一个不均匀的硬币变成一个均匀的硬币?

 这是个MS问我的问题,来自算法课。实际上我没想出来,但是知道答案后我又恍然大悟。

 最开始我总想在期望值上下功夫。比如正面概率0.8,反面0.2,那么我们先抛10次硬币,给正面朝上的频次乘以0.625,反面朝上的频次乘以2.5,然后我们就可以近似得到两者的频次相等啦。仔细想想这种方法好像只是乱来。

 接着又有第二个提案,我们抛100次硬币,前50次是照常,后50次把正反颠倒。这样出来的结果貌似正反的期望一样了。但还是麻烦,我们该如何定义概率为50%的事件呢。把情况从100次压缩到2次?

 可以想想,其实也不算难(尤其是在知道答案之后……)。

 ↓答案在下方

 /

 /

 /

 /

 /

 /

 /

 /

 /

 /

 /

 /

 我本来觉得我可以写一篇别人没写过的文章,但是发现自己太Naive,随便一搜就有很多这个话题的文章。GoCalf这位朋友在他的博文中有比较详细的介绍了:

 不想点链接的话可以看 我的版本

 把硬币抛两次,可能出现的情况有:{正正},{正反},{反正},{反反}。中间那两种情况是等概率的,均为p(1-p)。所以我们只需要定义:

 那么A、B事件就是等概率的了,也就是我们的「新」硬币从此诞生。

 这种方法从理论上解决了这一问题,不过缺点是在现实中并不好用。因为抛两次硬币,如果结果为{正正}或者{反反},那么是要扔掉这次实验结果再来一遍的。如果正面概率达到了0.9,那么{正正}的概率为0.81,我们将会有8成时间在做无用功。

 总而言之这个问题解决了。

问题三

 为了和其他文章不一样,我们需要「为赋新词强说愁」,所以我编了下面这个问题:

如何把一个不均匀的硬币变成一个均匀的六面骰子?

 有了前面的铺垫,这个问题不就迎刃而解了……吗。

 「均匀的六面骰子」意思就是会有六种结果,每种的概率是1/6。

 我的想法是这样的,抛四次硬币,把出现两次正面两次反面的结果(一共六个)定义为事件1-6,就搞定了。如下表格所示。

Outcome # of 1 New event
0000 0  
0001 1  
0010 1  
0011 2 Y
0100 1  
0101 2 Y
0110 2 Y
0111 3  
1000 1  
1001 2 Y
1010 2 Y
1011 3  
1100 2 Y
1101 3  
1110 3  
1111 4  

 事实上,数字1的个数相同的答案都可以组成一组新的事件,这样我们还可以实现其他概率的事件,比如取「1」的个数为1或者3的那些组合出来,可以实现1/4概率的事件(正四面体骰子?)。

 举一反三,如果我们抛3次硬币,还可以定义新的概率为1/3的等概率事件。抛5次硬币可以有更多的组合,如概率为1/10的等概率事件。

 如果各位朋友有什么新的解决方案欢迎提供。


 最近的Post好像篇幅都比较短。

LanternD
LanternD_Logo






订阅

RSS订阅 微信公众号

文以类聚

更多『blog』分类的文章