P粉8100506692023-08-22 00:30:17
これは、フィッシャー・イェーツ アルゴリズムの最適化されたバージョンである Durstenfeld shuffle の JavaScript 実装です。 リーリー
これは、トランプのデッキからランダムに描画するのと同じように、元の配列要素ごとにランダムな要素を選択し、次の描画から除外します。この賢い削除操作は、選択された要素を現在の要素と交換し、残りの要素から次のランダムな要素を選択し、効率を最適化するために逆方向にループし、ランダムな選択が確実に単純化されるようにします (常に 0 から開始できます)。最後の要素をスキップします。
アルゴリズムの実行時間は
O(n) です。シャッフルはその場で行われるため、元の配列を変更したくない場合は、最初に
.slice(0) を使用してコピーを作成することに注意してください。
リーリー
P粉5534287802023-08-22 00:07:03
実際、不偏シャッフル アルゴリズムは Fisher-Yates (Knuth としても知られる) シャッフル アルゴリズム です。
ここで 素晴らしいビジュアライゼーションをご覧いただけます (元の投稿 ここにリンクされています )