我发现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


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

最佳答案

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

关于python - python中的knuth shuffle,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57030583/

10-12 21:55