【发布时间】:2021-09-30 04:04:23
【问题描述】:
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]
为什么不直接选择全球位置并交换?
【问题讨论】:
-
"那么每次随机选择时要交换的位置总是0"——不,不是。
-
_int = int的原因是什么? -
@Barmar:这是避免一些全局查找的微优化。由于全局变量缓存优化,这些天影响不大。
标签: python fisher-yates-shuffle