Shuffle 洗牌 演算法

之前有為了 搭配random做洗牌苦惱了很久
後來也忘記有沒有找出解答了

單純,在剛剛突然想到了一種作法,紀錄一下

  • 更新 : 後來發現 此算法就是 Fisher–Yates shuffle 的變化版 ...
    果然古人早就(ry

想法很簡單,就是一個 array 放好之後,越取越小。

如果用 python 來做的話,大概是 :

1
2
3
4
5
6
7
8
9
10
11
12

arr = []
for i in range(52):
arr[].append(i)

new_arr = []

for i in range(52):
target = random().randint(0,arr.len()) # length 會隨著迴圈變小
new_arr.append(target)
arr.remove(target)

算是一個直覺的想法,也許和已存在某種作法重複了。