2011-07-09 131 views
7

你有一張列表中的卡片在該列表中的位置不移動的52張卡片。 你有第二張卡位置列表。首先,位置列表與第一個列表相同。這個簡單的洗牌算法是否會返回隨機洗牌的撲克牌?

  1. 遍歷第一個列表。

  2. 對於第一個列表中的每張卡片,生成一個從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% 

正如你所看到的,完全是非隨機的。我很喜歡數學家來證明爲什麼第5張牌比其他任何東西更可能是7,但我猜這與7這樣的早期牌有更多機會交換有關 - 這是正確的算法可以防止,它只允許卡交換一次。

回答

12

這是一個常見的方式來弄糟Fisher-Yates shuffle algorithm。請參閱What distribution do you get from this broken random shuffle?,以便對此實現的屬性進行熱烈的討論。


這是如何從費雪耶茨有什麼不同?

對於費雪耶茨,在k次卡,你必須選擇k52之間的隨機數。您每次選擇152之間的隨機數字。


您描述的方法與What distribution do you get from this broken random shuffle?中討論的方法類似,但可能並不完全相同。你的實現類似於「隨機排序」的洗牌研究(見Diaconis,Fill和Pitman的Analysis of Top To Random Shuffles),它最終會給出一個完全洗牌的套牌,儘管不是「一次通過」。頂部的隨機洗牌描述如下:

選擇從1隨機數p52,並在p位置換頂牌與 卡。繼續到 頂牌是原本在 的位置52,此後是 隨機擺放的牌組是隨機的 命令。

此停止條件被稱爲「停止時間」,並且需要相當長的時間才能達到。 Fisher-Yates洗牌速度更快。

2

是的,存在一個偏差,並且它很容易計算。

您可以讓隨機數發生器52次查找1到52之間的數字。這最終可能會達到52^52個可能的答案。

但是隻有52!可能的洗牌甲板,所以使用上述算法,洗牌不能均勻分佈。

您需要確保您詢問隨機數發生器的ld(52!)位隨機性,而不是ld(52^52)