假设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。