撲克洗牌演算法

2021-10-01 20:28:38 字數 726 閱讀 8073

card_list =

for i in

range(1

,55):

card_list = copy.deepcopy(card_list)

# 為保證原資料不被改變,對原列表進行深拷貝乙份

for i in

range(1

,54):

index = random.randint(i,54)

card_list[i-1]

, card_list[index]

= card_list[index]

, card_list[i-

1]

實現方式如下:

第一次隨機到 10 – > [10, 2, 3, …, 9, 1, 11, …, 54]

第二次隨機到 21 --> [10, 21, 3, …, 9, 1, 11, …20, 2, 22, …,54]

······

依次類推,完成洗牌

注:經測試,一般洗7次得到的牌效果是最好。

除了以上的方法還有另一種,因為效率較低,所以不推薦使用

result =

for i in

range(54

):index = random.randint(i,54)

) card_list.pop(index)

撲克洗牌演算法

最近看到了遇到面試題,內容是以最快的方法將一副撲克牌重洗?覺得挺有意思,總結了三種方法,下面的的 是用js,呵呵,下面是 functionshuffle 洗牌方法1 this.shuffle1 function returnarr3 最簡單粗暴的一種方法 this.shuffle2 function...

撲克牌洗牌演算法 random shuffle

撲克牌洗牌有多種演算法 第1個 每次從原陣列a取出範圍 1,i 的數放入b陣列。缺點是每次都要將陣列i後面的元素進行移動。是乙個o n2 演算法 void xipai int n n for int i 1 i x i 第2種 每次取範圍 1,i 1 的數,然後與最後乙個元素做交換。這樣的複雜度優化...

洗牌演算法(打亂撲克牌順序)

問題描述 有乙個大小為 n 的有序陣列,如何打亂元素順序,使得任一元素在陣列的任一位置出現的概率都為 1 n?也就是說對於大小為 n 的有序陣列,有 n!種排列方式,要求能等概率的得到這 n!種結果。思路一 每次從原始陣列中隨機取乙個之前未取過的元素,新增到新陣列中。選取方法是 生成乙個 1 rem...