これは、フィッシャー・イェーツ アルゴリズムの最適化されたバージョンである Durstenfeld shuffle の JavaScript 実装です。 リーリー
O(n) です。シャッフルはその場で行われるため、元の配列を変更したくない場合は、最初に .slice(0) を使用してコピーを作成することに注意してください。
です。シャッフルはその場で行われるため、元の配列を変更したくない場合は、最初に
リーリー
実際、不偏シャッフル アルゴリズムは Fisher-Yates (Knuth としても知られる) シャッフル アルゴリズム です。
ここで 素晴らしいビジュアライゼーションをご覧いただけます (元の投稿 ここにリンクされています )
これは、フィッシャー・イェーツ アルゴリズムの最適化されたバージョンである Durstenfeld shuffle の JavaScript 実装です。 リーリー
これは、トランプのデッキからランダムに描画するのと同じように、元の配列要素ごとにランダムな要素を選択し、次の描画から除外します。O(n)
です。シャッフルはその場で行われるため、元の配列を変更したくない場合は、最初に
.slice(0)を使用してコピーを作成することに注意してください。
編集: ES6/ECMAScript 2015 に更新されました
新しい ES6 では、2 つの変数を同時に割り当てることができます。これは、1 行のコードで実行できるため、2 つの変数の値を交換する場合に特に便利です。この機能を使用する同じ関数の短い形式を次に示します。リーリー
実際、不偏シャッフル アルゴリズムは Fisher-Yates (Knuth としても知られる) シャッフル アルゴリズム です。
ここで 素晴らしいビジュアライゼーションをご覧いただけます (元の投稿 ここにリンクされています )