shuffle函数中随机选择位置交换的原理是什么
What is the principle of randomly selecting positions to swap in the shuffle function
Fisher–Yates shuffle 的意思是我们每次从选中的segment中取出最后一个数字和之前随机选择的数字交换,不断迭代,最终实现官方Shuffle中的随机shuffling.The代码python3.6如下
_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]
为什么不选择全球位置并交换?
random()
是 [0, 1)
范围内的浮点数。当您将其乘以 i+1
时,您会得到一个 [0, i+1)
范围内的浮点数。当您将其转换为整数时,您会得到一个 [0, i]
.
范围内的整数
当然,你可以只使用random.randint(0, i)
。而reverse(range(1, len(x))
可以简化为range(len(x)-1, 0, -1)
.
Fisher–Yates shuffle 的意思是我们每次从选中的segment中取出最后一个数字和之前随机选择的数字交换,不断迭代,最终实现官方Shuffle中的随机shuffling.The代码python3.6如下
_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]
为什么不选择全球位置并交换?
random()
是 [0, 1)
范围内的浮点数。当您将其乘以 i+1
时,您会得到一个 [0, i+1)
范围内的浮点数。当您将其转换为整数时,您会得到一个 [0, i]
.
当然,你可以只使用random.randint(0, i)
。而reverse(range(1, len(x))
可以简化为range(len(x)-1, 0, -1)
.