把不均匀硬币变成均匀的六面骰子
2017-11-07
问题一
如何把一种不均匀的硬币变成均匀的硬币?
啊哈,把两个硬币按头对尾的顺序粘在一起就可以实现了。
问题二
如何把一个不均匀的硬币变成一个均匀的硬币?
这是个MS问我的问题,来自算法课。实际上我没想出来,但是知道答案后我又恍然大悟。
最开始我总想在期望值上下功夫。比如正面概率0.8,反面0.2,那么我们先抛10次硬币,给正面朝上的频次乘以0.625,反面朝上的频次乘以2.5,然后我们就可以近似得到两者的频次相等啦。仔细想想这种方法好像只是乱来。
接着又有第二个提案,我们抛100次硬币,前50次是照常,后50次把正反颠倒。这样出来的结果貌似正反的期望一样了。但还是麻烦,我们该如何定义概率为50%的事件呢。把情况从100次压缩到2次?
可以想想,其实也不算难(尤其是在知道答案之后……)。
↓答案在下方
/
/
/
/
/
/
/
/
/
/
/
/
我本来觉得我可以写一篇别人没写过的文章,但是发现自己太Naive,随便一搜就有很多这个话题的文章。GoCalf这位朋友在他的博文中有比较详细的介绍了:
不想点链接的话可以看 我的版本 :
把硬币抛两次,可能出现的情况有:{正正},{正反},{反正},{反反}。中间那两种情况是等概率的,均为p(1-p)。所以我们只需要定义:
- 【事件A】为:抛两次硬币,出现{正反};
- 【事件B】为:抛两次硬币,出现{反正}。
那么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