python中的knuth shuffle

时间:2019-07-14 19:42:21

标签: python numpy

我发现knuth随机播放是从头到尾完成的,例如

from random import randrange

def knuth_shuffle(x):
    for i in range(len(x)-1, 0, -1):
        j = randrange(i + 1)
        x[i], x[j] = x[j], x[i]
    return x

但是,我在考虑为什么我们不能从头到尾使用它。像这样:

from random import randrange

def knuth_shuffle(x):
    for i in range(0, len(x), 1):
        j = randrange(i, len(x))
        x[i], x[j] = x[j], x[i]
    return x

我发现第二个函数的运行时间总是比第一个函数长。有人对此有一些线索吗?

1 个答案:

答案 0 :(得分:0)

您的替代解决方案看起来完全可以。它的作用相同,但是从左到右。 我已经尝试过了(在多达1000000个元素上的列表上),但是我没有注意到运行时间有任何显着差异。 您洗牌有多大? 运行时间有何不同? 它们是否取决于列表的大小?