-2

Fisher-Yates shuffle的意思是我们每次从选中的segment中取出最后一个数,和之前随机选中的数交换,不断迭代,最终实现随机shuffle。python3.6中官方Shuffle的代码如下

     _int = int
     for i in reversed(range(1, len(x))):
          # pick an element in x[:i+1] with which to exchange x[i]
          j = _int(random() * (i+1))
          x[i], x[j] = x[j], x[i]

为什么不直接选择全球位置并交换?</p>

4

1 回答 1

2

random()是范围内的浮点数[0, 1)。当你将它乘以 时i+1,你会得到一个范围内的浮点数[0, i+1)。当您将其转换为整数时,您会得到 range 中的整数[0, i]

当然,你可以只使用random.randint(0, i). 并且reverse(range(1, len(x))可以简化为range(len(x)-1, 0, -1)

于 2021-09-30T04:10:10.243 回答