-2
A
回答
2
這是典型的(我認爲可證明是最好的,使用需要LEN(x)的階乘排列位的確切數目):
def shuffle(x):
"""Shuffle list x in place, and return None."""
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = int(random() * (i+1))
x[i], x[j] = x[j], x[i]
+2
看起來不錯。重要的一點是,你可能首先想到的是,將i上的隨機數交換爲N,而不是0到N。在0到N之間交換給出了一個奇怪的,不均勻的分佈。 –
7
使用Fisher Yates algorithm。許多編程語言使用該算法的變體來混洗有限集合的元素。這是Fisher Yates算法的僞碼(由Richard Durstenfeld優化的版本):
-- To shuffle an array a of n elements (indices 0..N-1):
for i from N−1 downto 1 do
j ← random integer such that 0 ≤ j ≤ i
exchange a[j] and a[i]
該算法確保均勻分佈。對於N
卡,有N!可能的混洗組合。這裏排列的N!
中的任何一個都可能返回。時間複雜度是O(N)
。
相關問題
- 1. 洗牌算法:晚餐部門洗牌
- 2. 洗牌陣列的最佳算法
- 3. 這個洗牌算法爲什麼是錯的?
- 4. 什麼是一個很好的洗牌比例?
- 5. 算法洗牌數據
- 6. 什麼導致這個奇怪的洗牌算法行爲?
- 7. 什麼是「洗牌」數據庫記錄表的最佳方式?
- 8. 的快速算法進行排序和洗牌等值項(最好STL的)
- 9. 洗牌回收數據的算法
- 10. 蟒蛇洗牌算法的性能
- 11. 數組乘法 - 什麼是最好的算法?
- 12. 什麼是好的(半)異步算法?
- 13. 什麼是好的重疊組算法?
- 14. 什麼是好的輪詢算法
- 15. 我的列表管理最好的算法是什麼?
- 16. 這個簡單的洗牌算法是否會返回隨機洗牌的撲克牌?
- 17. 什麼是卡洗牌程序如何工作的一個很好的解釋?
- 18. 完美洗牌算法實現錯誤
- 19. 什麼是兩維最近鄰問題的好算法?
- 20. 這種情況下最好的排序算法是什麼?
- 21. 什麼是最好的預留座位排序算法?
- 22. 什麼是最好的「交鑰匙」干擾算法?
- 23. 什麼是最好的算法來解決拼圖遊戲
- 24. 什麼是最好的深度圖生成算法?
- 25. 什麼是記錄最好的方法?
- 26. 什麼是最好的Ajax方法?
- 27. Sort ObservableCollection - 什麼是最好的方法?
- 28. 什麼是最好的方法有URL
- 29. NSArray無法洗牌
- 30. 如何最好地描述TreeSort和HeapSort算法是什麼?
你怎麼定義最好的洗牌包? – Pang
定義「最佳」。此外,這個問題主要是基於意見的,或者要求提供第三方內容的建議,這兩者在Stack Overflow上都是無關緊要的。 –
最小步驟和卡片之間的距離,顯然某些類型的洗牌優於其他類型。 –