Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 这个简单的洗牌算法会返回一副随机洗牌的扑克牌吗?_Algorithm_Random_Shuffle - Fatal编程技术网

Algorithm 这个简单的洗牌算法会返回一副随机洗牌的扑克牌吗?

Algorithm 这个简单的洗牌算法会返回一副随机洗牌的扑克牌吗?,algorithm,random,shuffle,Algorithm,Random,Shuffle,您有一个52张牌的列表,其中牌在该列表中的位置不会移动。 您还有第二张卡片位置列表。首先,职位列表与第一个列表相同 遍历第一个列表 对于第一个列表中的每张卡,生成一个从1到52的数字。将其在第二个列表中的位置与该位置的卡交换 是否存在偏见?为什么? 更新:从来没有人相信纯粹的数学或逻辑,我决定自己实现这一点。下面是第五张牌(位置)成为1到52之间每个数字的概率百分比: 1. 1.9346% 2. 1.9011% 3. 1.8513% 4. 1.8634% 5. 1.8561% 6. 1.8382

您有一个52张牌的列表,其中牌在该列表中的位置不会移动。 您还有第二张卡片位置列表。首先,职位列表与第一个列表相同

  • 遍历第一个列表

  • 对于第一个列表中的每张卡,生成一个从1到52的数字。将其在第二个列表中的位置与该位置的卡交换

  • 是否存在偏见?为什么?

    更新:从来没有人相信纯粹的数学或逻辑,我决定自己实现这一点。下面是第五张牌(位置)成为1到52之间每个数字的概率百分比:

    1. 1.9346%
    2. 1.9011%
    3. 1.8513%
    4. 1.8634%
    5. 1.8561%
    6. 1.8382%
    7. 2.5086%
    8. 2.4528%
    9. 2.4552%
    10. 2.3772%
    11. 2.3658%
    12. 2.3264%
    13. 2.3375%
    14. 2.287%
    15. 2.2627%
    16. 2.2151%
    17. 2.1846%
    18. 2.1776%
    19. 2.1441%
    20. 2.1103%
    21. 2.084%
    22. 2.0505%
    23. 2.0441%
    24. 2.0201%
    25. 1.972%
    26. 1.9568%
    27. 1.9477%
    28. 1.9429%
    29. 1.9094%
    30. 1.8714%
    31. 1.8463%
    32. 1.8253%
    33. 1.8308%
    34. 1.8005%
    35. 1.7633%
    36. 1.7634%
    37. 1.769%
    38. 1.7269%
    39. 1.705%
    40. 1.6858%
    41. 1.6657%
    42. 1.6491%
    43. 1.6403%
    44. 1.6189%
    45. 1.6204%
    46. 1.5953%
    47. 1.5872%
    48. 1.5632%
    49. 1.5402%
    50. 1.5347%
    51. 1.5191%
    52. 1.5011%
    

    正如你所看到的,这不是随机的。我想请一位数学家来证明为什么第五张牌比其他任何牌都更可能是7,但我猜这是因为早期的牌,比如7,有更多的交换机会——这正是正确的算法所阻止的,它只允许牌交换一次。

    这是一种常见的搞糟游戏的方法。有关此实现的属性的生动讨论,请参见


    这与费希尔·耶茨有何不同?

    对于Fisher Yates,在
    k
    th卡上,您必须在
    k
    52
    之间选择一个随机数。您每次都在
    1
    52
    之间选择一个随机数


    您描述的方法与中讨论的方法类似,但可能不完全相同。您的实现类似于精心研究的“从顶部到随机”洗牌(参见Diaconis、Fill和Pitman),它最终将提供一个完全洗牌的牌组,尽管不是“一次通过”。随机洗牌的顶部描述如下:

    1
    到中选择一个随机数
    p
    52
    ,然后用 卡在位置
    p
    。继续到 最上面的卡片是中最初的卡片 位置
    52
    ,然后是 随机放置甲板是随机放置的 秩序


    这种停止条件称为“停止时间”,需要相当长的时间才能达到。Fisher-Yates洗牌速度快得多。

    是的,存在偏差,并且易于计算

    对于介于1和52之间的数字,您向随机数生成器询问了52次。最终,这相当于52^52个可能的答案

    但是只有52个!可能的洗牌组,因此使用上述算法,洗牌不能均匀分布

    您需要确保向随机数生成器询问
    ld(52!)
    随机位,而不是
    ld(52^52)