Fisher–Yatesアルゴリズム
from 20241109
Fisher–Yatesアルゴリズム
シャッフルアルゴリズム
O(n)
シャッフルした値が再度シャッフルされない
そのシャッフル、本当にシャッフルですか?何気ない落とし穴にハマった話
世界最速の配列シャッフルアルゴリズム、Fisher-Yatesアルゴリズム
Pythonによる実装
The algorithmを少し見たら実装が間違っていることに気づいた(シャッフルした値が再度シャッフルされてしまう)
https://github.com/TheAlgorithms/Python/blob/3e9ca92ca972bbe752d32b43c71a88789dce94c0/other/fischer_yates_shuffle.py#L13
code:py
import random
def fisher_yates_shuffle(collection):
for i in range(len(collection)):
j = random.randint(i, len(collection) - 1)
collectioni, collectionj = collectionj, collectioni
return collection