, :
def OW60(sign=1):
r1 = random.randint (1, 30)
r2 = random.randint (1, 30)
val = sign * (r1 + r2)
islow = (r1<=5) + (r2<=5)
ishigh = (r1>=26) + (r2>=26)
if islow == 2 or ishigh == 2:
return val + OW60(1)
elif islow == 1 and ishigh == 1:
return val + OW60(-1)
else:
return val
, ; . (, , .) , , "" - Python dict s?
, : , F (x) CDF OW60 (1),
F(x) = the probability that OW60(1) returns a value ≤ x.
G(x) = the probability that OW60(-1) returns a value ≤ x.
F (x) , (30 30 ) . , (2,3), , (1/30) (1/30) (5 + F (x-5)) F ( ). , ,
F(x) = (1/900)(2+F(x-2) + 3+F(x-3) + ... + 59+F(x-59) + 60+F(x-60))
900 , (a, b) [30] ; [30]. (a, b) ≤5 ≥26 a + b + F (xab), ≤5 ≥26 a + b + G (xab) , (a + b), .
,
G(x) = (1/900)(-2+F(x-2) + (-3)+F(x-3) + ... + (-59)+F(x-59) + (-60)+F(x-60))
, ; F-, , F (x-60) F (x-52) F (x-10) F (x-2) ( a, b≥26 ≤5) G-, , G (x-35) G (x-27) ( a, b≥26 ≤5), 30. , V (x)
V(x) = [F(x-60) G(x-60) ... F(x-2) G(x-2) F(x-1) G(x-1) F(x) G(x)]
(), ( F G)
V(x) = A*V(x-1) + B
A B ( ), , V (x) = [0 0] x , F (x) G (x) x , . ( f (x), x, F (x) -F (x-1), .)
, . , ? , , , (, , , ). ad-hoc- .