这个使用 randint 的算法是否被认为是公平洗牌?

问题描述 投票:0回答:1

我对以下函数进行了多次模拟,考虑到所有排列大致相等,这似乎是公平的洗牌,但我不明白它为什么有效。它只是在当前洗牌的牌组中随机插入,不是吗?

def shuffle_deck(deck):
    shuffled_deck = []
    for card in deck:
        r = random.randint(0, len(shuffled_deck))
        shuffled_deck.insert(r, card)
    return shuffled_deck

我预计这会是不均匀的概率排列。

python algorithm shuffle
1个回答
0
投票

生成“显然”有效的随机排列的一种方法是从一副完整的牌开始,重复地从该牌中随机选择一张牌并将其放在新牌上,直到旧牌消失。

如果你这样做,并记住你使用的所有随机数,那么你可以将它们输入到你的洗牌算法中,将新牌组变回旧牌——你的洗牌算法完全撤销了原来的洗牌。

因此你的算法是有效的,因为它产生随机排列的逆,这也是随机排列。

© www.soinside.com 2019 - 2024. All rights reserved.