一个概率发生器产生 1 的概率为 p ,产生 0 的概率为 1-p ,用这个概率发生器做一个产生 1 和 0 的概率分别为 0.5 的概率发生器。

2011-04-08 15:55:13 +08:00
 darasion
5389 次点击
所在节点    问与答
11 条回复
vayn
2011-04-08 16:09:15 +08:00
想到个土办法, 随机生成 1-10, 选到前5个输出 0,选到后 5 个生成 1
vayn
2011-04-08 16:11:24 +08:00
random.choice([0, 1]) 可行否?
Kymair
2011-04-08 16:21:13 +08:00
跑两次,如果结果是00或11就重新再来跑两次,直到结果是01或10为止。01则返回0,10则返回1
Kymair
2011-04-08 16:22:52 +08:00
.. 500 error
看来发帖时碰到500要谨慎重发
olive1
2011-04-08 16:25:39 +08:00
if(p>(1-p)){
p-x=0.5;
1-p+x=0.5;
}else{
p+x=0.5;
1-p-x=0.5;
}
raptium
2011-04-08 16:34:23 +08:00
看到第一句話讓我想起上個學期拿了 C+ 的 Information Theory ...
話說 @Kymair 的答案就是正確答案吧 貌似在哪兒看過了~~
darasion
2011-04-08 16:42:26 +08:00
@raptium 嗯嗯。算了一下 @Kymair 的办法是结果是正确的。
这是一道面试题,可惜我当时没想到还能让一个东西跑很多次很多次。总以为那样会浪费。一紧张就没答上。。

@vayn 土办法不行啊,条件限制要用给定的发生器。

@olive1 没看懂。
vayn
2011-04-08 16:49:55 +08:00
@darasion random.choice([0, 1]) 跑得次数足够多,0 和 1 出现的概率也是各 1/2,这个想法来自于投硬币。不过前提是 choice 得是真随机。

@Kymair 的方法我好像也见过,不错
9hills
2011-04-08 16:58:22 +08:00
原来如此,p(1-p) = (1-p)p
没想到
aligo
2011-04-08 18:59:03 +08:00
@Kymair 的方法问题就在于可以永远的投下去,所以没办法得出结果,无法证明其概率是否相等,于情于理都有点怪异XD

但是解决实际问题倒是够了
9hills
2011-04-08 19:56:55 +08:00
@aligo 可以证明啊,连续投两次为11的概率为p*p,10是p*(1-p),01是(1-p)*p,00为(1-p)*(1-p)

由于抛出11和00后就放弃重抛,10和01的概率明显相等。
最笨的证明用无穷级数的办法做---
Kymair
2011-04-09 00:21:13 +08:00
跑两次,如果结果是00或11就重新再跑两次,直到结果是01或10为止。01就返回0,10就返回1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/11157

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX