Python 畸变随机序列的变换产生随机序列?

Python 畸变随机序列的变换产生随机序列?,python,algorithm,random,Python,Algorithm,Random,我的程序生成了所谓的开关(x)序列 以下是生成它们的算法的描述: # define a switch(x) sequence of length n^2 def switch(x): s = [] # define a bit string s: s.append(random.choice([True, False])) # set its first bit randomly, for i

我的程序生成了所谓的开关(x)序列

以下是生成它们的算法的描述:

# define a switch(x) sequence of length n^2
def switch(x):
    s = []                                     # define a bit string s:
    s.append(random.choice([True, False]))     # set its first bit randomly,
    for i in range(1, n * n):                  # but for every subsequent bit i,
        prior = s[i-1]                         # find its prior bit i-1,
        shouldSwitch = x > random.random()     # and with probability 1-x,
        if shouldSwitch: s.append(not prior)   # set i to opposite of its prior;
        else: s.append(prior)                  # otherwise, have i = its prior.
    return s
当x=0.5时,该序列被认为是一个完全随机的位序列。偏离x会产生交替或重复比特太频繁的序列,从而扭曲这种随机性

我制作了一个程序,计算生成的开关(x)序列的平均交替率

r = 0.0
for i in range(len(s)-1):
    if s[i] != s[i+1]:
        r = r + 1
rate = r/(len(s)-1)
当然,当我把一个开关(x)序列通过它时,我总是得到一个相对接近x的速率,不管x是什么。比如,百分之一以内

但假设我像这样变换生成的开关(x)序列(其中len(s)=n*n):

每当我计算以这种方式变换的序列的交替率时,我总是得到一个非常接近.5的值!这种一致性是可怕的

这对我来说没有多大意义,特别是对于非常接近0或1的x值。所以我希望你能帮我找出哪里出了问题


如果我的风格/效率有问题,很抱歉 x< /代码>,我们考虑比较序列中2个步骤的值,则我们(其中<代码> f>代码>为翻转,<代码> N< /代码>未翻转):

在前两种情况下,两个值相等,而在后两种情况下,两个值不同。所以

P(equal) = P(FF) + P(NN) = x*x + (1-x)*(1-x)
P(different) = P(FN) + P(NF) = x*(1-x) + (1-x)*x = 2x*(1-x)
所以对于一个值
x=0.25
来说,我们有

P(equal) = 0.25*0.25 + 0.75*0.75 = 0.625
P(different) = 2 * 0.25 * 0.75 = 0.375
这比我们开始使用的
x
更接近
0.5
。我怀疑,如果值之间的距离大于2,则会开始接近0.5,正如您所看到的

P(equal) = P(FF) + P(NN) = x*x + (1-x)*(1-x)
P(different) = P(FN) + P(NF) = x*(1-x) + (1-x)*x = 2x*(1-x)
P(equal) = 0.25*0.25 + 0.75*0.75 = 0.625
P(different) = 2 * 0.25 * 0.75 = 0.375