假设biased-random输出1的概率为p,输出0的概率为(1-p)
连续使biased-random输出两次结果,有如下可能
00, 01, 10, 11
其概率分别为
(1-p)(1-p), (1-p)p, p(1-p), pp
可以发现01和10的概率相同,均为p(1-p),我们可以将这两种等概率的情况作为输出,同时忽略00和11。
def biased_random(): if random.random() > 0.7: return 1 else: return 0 def advance_random(): while True: a = biased_random() b = biased_random() if (a == 1 and b == 0): return 1 elif(a == 0 and b == 1): return 0 sum = 0 for i in range(100000): if advance_random() == 1: sum = sum + 1 print sum/100000.0
实验给出结果,概率近似为0.5。
原文:http://www.cnblogs.com/NightRain/p/4905548.html