了解Fisher-Yates洗牌

时间:2014-04-24 23:51:59

标签: javascript

我有这个方法:

shuffleDeck: function()
        {
            var counter = this.deck.length, temp, index;
            while(counter > 0)
                {
                    index = Math.floor(Math.random() * counter);
                    counter--;
                    temp = this.deck.getcard(counter);
                    this.deck.getcard(counter) = this.deck.getcard(index); //*
                    temp = this.deck.getcard(index);
                }
},

在标有*的行上给出了错误。我知道为什么我得到错误(=的左手是不正确的),但我不完全理解Fischer-Yates的洗牌,所以我想知道是否有人可以引导我完成我的代码! 感谢

1 个答案:

答案 0 :(得分:1)

你需要理解它来实现吗?

算法只是从剩下的一组牌中随机挑选一张牌并将其放在你的洗牌堆上。您的实施正在做的是:

  1. 从牌组的后面开始(柜台=长度-1,与其交换时间)
  2. 随机挑选一张从0到反1的卡片,即直到我们指向的卡片
  3. 将此卡与计数器1处的卡交换,即将其放在后面
  4. 减少反击 - 即将该卡留在原处 - 然后重复直到你到达甲板前面。
  5. 一次在一张牌的背面堆积洗牌堆。

    您可能需要更改*行和后面的行

    this.deck.setcard(counter, this.deck.getcard(index));
    this.deck.setcard(index, temp);
    

    (我猜测setcard方法及其参数。)