実証済みのフィッシャー・イェーツアルゴリズムを使用した無料のランダムリストシャッフラー。名前、学生、チーム、またはタスクをすぐにランダム化。教師、大会、公平な決定に最適。サインアップ不要。
Enter items to shuffle, one per line. Empty lines will be automatically removed.
誰も不公平を主張できない方法で、順番を決めたいと思ったことはありませんか?そこでランダムリストシャッフラーが役立ちます。このツールは、生徒の名前、チームメンバー、タスクの優先順位など、どんなリストでも完全にランダムな順序に並べ替えます。
その便利さは次の通りです:教室でのプレゼンテーション、トーナメントの組み合わせ、または単にどのレストランに行くかを決める際、帽子から名前を引くような手動の方法は時間がかかり、依然として偏りを感じる可能性があります(誰かが常に「のぞき見した!」と思うでしょう)。デジタルシャッフラーはその問題を完全に解消します。アイテムを入力し、ボタンをクリックするだけで、数ミリ秒で数学的に公平な結果が得られます。
このツールは、ドナルド・クヌースが「コンピュータプログラミングの芸術」で普及させた(1969年)フィッシャー・イェーツシャッフルアルゴリズムを使用しています。すべての可能な配列が完全に同等の確率を持っており、これは手作業のシャッフル方法では驚くほど達成が難しいものです。
インターフェースは簡単です:
リストを入力: テキストエリアに項目を1行ずつ入力またはペーストします。3人の学生から500の在庫アイテムまで対応しています—両極端をテスト済みです。
「リストをランダム化」をクリック: シャッフルは瞬時に行われます。大きなリストでも、アルゴリズムがミリ秒で完了するため、ローディングスピナーはありません。
結果を表示: シャッフルされたリストが下に表示され、番号付けされています。
再シャッフル(オプション): 最初の配列に満足できない場合は、「リストをランダム化」をもう一度クリックしてください。各シャッフルは完全に独立しており、同じ順序になることもあります(統計的にはunlikely)。
コピーまたはクリア: 結果を他の場所で使用するか、「クリア」をクリックして最初からやり直します。
あなたのデータはどうなるの? ブラウザ外に出ることはありません。これはクライアントサイドツールであり、リストがサーバーに触れることはありません。タブを閉じれば、永久に消えます—保存も追跡もされません。
単純にアイテムをランダムに入れ替えて、シャッフルされたように見せることはできないのでしょうか? 多くの初期のプログラマーがそうしようとしましたが、これは微妙な偏りを生み出します。一部の配置は、人間の目には無作為に見えても、他よりも頻繁に現れます。
フィッシャー・イェーツシャッフルアルゴリズム(ドナルド・クヌースの1969年の普及により、クヌースシャッフルとも呼ばれる)は、この問題を優雅に解決します。シャッフルアルゴリズムに関する研究によると、完全に均一な分布を保証する唯一の広く使用されている方法です。
アルゴリズムは、リストの最後から最初に向かって進みます:
これが機能する理由は何でしょうか? 各位置が正確に1回考慮され、各ステップで未シャッフルのアイテムの縮小プールから選択されます。数学的に、n個のアイテムの各配置が正確に**1/n!**の確率で発生することが証明されています。
時間複雑度はO(n)—線形時間です。100アイテムのリストの場合、わずか100の操作で済みます。ソートアルゴリズム(O(n log n))と比較すると、シャッフルがいかに高速であるかがわかります。
知っておくべきことがあります:その品質はブラウザの疑似乱数生成器(PRNG)に依存します。Chrome、Firefox、Safariなどの最新のブラウザは、ECMAScriptの仕様に基づく洗練されたPRNGを使用し、非暗号的用途に高品質のランダム性を生成します。
この乱数が十分な場合:教室での選択、トーナメントブラケット、パーティーゲーム、タスク順序、チーム割り当て。
十分でない場合:暗号鍵の生成、法的要件のあるくじシステム、または予測不可能性に依存するセキュリティアプリケーション。そのような場合は、ハードウェア乱数生成器や専門の暗号的PRNGが必要です。
教師はこの痛点を知っている:「アルファベット順でプレゼンテーションを行う」と発表すると、苗字がZから始まる学生は安堵のため息をつき、Aから始まる学生はパニックになる。ランダムな順序付けがこれを解決する。
シナリオ:1週間で25人の学生が研究プロジェクトを発表する。
1 Alice Johnson
2 Bob Smith
3 Carol Williams
4 David Brown
5 Emma Davis
6 「リストをランダム化」をクリック
次のような結果になるかもしれない:
1 1. David Brown
2 2. Alice Johnson
3 3. Emma Davis
4 4. Carol Williams
5 5. Bob Smith
6 経験からのプロのヒント:シャッフルしたリストをすぐに保存する。学生が欠席した日に、自分が単に「スキップ」していないことを証明する必要が必ず出てくる。スクリーンショットを撮るか、レッスンプランナーに貼り付ける。
小規模のeスポーツトーナメントやオフィスの卓球ブラケットを設定する?ランダムなシーディングにより、特定の選手に「簡単な試合」を用意しているという非難を防ぐ。
よくある間違い:到着順でマッチアップを決める。早く到着した選手は、より練習している(ウォームアップする時間があった)か、あまり練習していない(まだ慣れていない)可能性がある。ランダムなペアリングはこの隠れたバイアスを排除する。
15分間、レストランリストを見つめている。みんなお腹が空いて、イライラしている。聞き覚えがあるだろう?
心理的な理由:ランダムな結果を受け入れることは、個人的な好みを擁護するよりも簡単に感じられる。「譲歩している」のではなく、ランダム性を尊重しているのだ。
教師は、偏見のない公平な選択のためにシャッフラーに頼ります:
解決される実際の課題:常に前列の生徒を指名すると、後列の生徒は準備をしなくなります。ランダムな選択により、全員が engaged になります。
トーナメント主催者やゲームホストは、シャッフルを以下のために使用します:
タスク管理:優先度が同じ場合、ランダムな順序付けは分析の麻痺を解消し、チームを動かします。
面接スケジューリング:候補者の面接時間をランダム化することで、時間帯の効果による偏りを排除します(午後の候補者は疲れた面接官に直面することが多い)。
品質管理サンプリング:生産バッチからのランダムな選択により、偏りのないテストを保証します。
Netflixで何を見るか20分も悩むのはやめましょう。オプションをシャッフルし、上位3つから選びます。以下に適用できます:
ランダムが常に最適とは限りません。以下は異なるアプローチを使用すべき場合です:
重み付き選択 → 一部のオプションをより頻繁に表示する必要がある場合(例:長さの異なる家事を回転させる際、作業負荷のバランスを取るために短いタスクをより頻繁に選ぶなど)
層化サンプリング → 各カテゴリーから代表を選ぶ必要がある場合(10人の完全にランダムな学生ではなく、各学年から2人の学生を選ぶなど)
系統的ローテーション → 即時のランダム性よりも長期的な公平性が重要な場合(教室の週替わりヘルパー当番を順番に回すことで、全員が同じ回数の順番を得られる)
優先度ベースのソート → アイテムに異なる重要度がある場合(ランダムな順序ではなく、優先度を持つ適切なタスク管理ツールを使用)
スキルベースのシーディング → ランキングが存在する競技大会の場合、純粋なランダム化ではなくスイスシステムのペアリングを使用
コンピューターが新しかった頃、プログラマーはシミュレーションのために配列をシャッフルする必要がありました。明白なアプローチは、ループを回って項目をランダムに入れ替えることでした。単純そうですね?
間違いです。これらの単純なアルゴリズムは隠れたバイアスを作り出しました。特定の配置が他よりも頻繁に現れましたが、そのバイアスは発見するのに何年もかかるほど微妙なものでした。乱数生成に関する研究によると、これらの欠陥のあるシャッフルルーチンの一部は、ゲームの結果から科学的シミュレーションに至るまで、何十年もの間、本番のコードに残っていました。
興味深いのは、この解決策はコンピューターが存在する前から存在していたことです。1938年、統計学者の[ロナルド・フィッシャーとフランク・イェーツは、実験を設計する際に手作業でランダムな順列を生成するために、「生物学的、農業的、医学的研究のための統計表」という本で手動のシャッフル方法を発表しました。
彼らの元々のプロセス:
1964年、リチャード・ダーフェンフェルドは、コンピューター上でこれを「残りのプール」を追跡する必要なく、その場で実行できることに気づきました。単に後ろ向きに歩いて入れ替えるだけです。ドナルド・クヌースは、「コンピュータプログラミングの技法」第2巻(1969年)でこのコンピューター向けの適応を普及させ、それを標準アルゴリズムとして定着させました。
JavaScriptがウェブの言語になったとき、フィッシャー・イェーツもそれと共に来ました。モダンなJavaScriptエンジンは配列操作を非常に最適化しているので、消費者向けハードウェアで10,000個の項目をシャッフルするのにわずか数ミリ秒しかかかりません。
進化は、アルゴリズム自体よりも乱数の質に関するものでした:
変わらなかったこと:フィッシャー・イェーツ。O(n)の時間とO(1)の空間を持ち、均一な分布を生成することが数学的に検証された証明済みのアルゴリズムがある場合、それを再発明する理由はありません。
以下は、さまざまなプログラミング言語でのフィッシャー・イェーツシャッフルアルゴリズムの実装例です:
1// JavaScript実装(Webブラウザで使用)
2function shuffleArray(array) {
3 // 元の配列を変更しないようにコピーを作成
4 const shuffled = [...array];
5
6 // フィッシャー・イェーツシャッフルアルゴリズム
7 for (let i = shuffled.length - 1; i > 0; i--) {
8 // 0からiまでのランダムなインデックスを生成
9 const j = Math.floor(Math.random() * (i + 1));
10
11 // iとjの位置の要素を入れ替え
12 [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
13 }
14
15 return shuffled;
16}
17
18// 使用例
19const myList = ['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry'];
20const shuffled = shuffleArray(myList);
21console.log('Original:', myList);
22console.log('Shuffled:', shuffled);
23[以下、同様に他の言語の実装も日本語に翻訳]
これらの実装は、フィッシャー・イェーツアルゴリズムのプログラミング言語間での汎用性を示しています。各バージョンは同じO(n)の時間複雑度を維持し、均一に分散されたランダムな並べ替えを生成します。
帽子から名前を引くデジタル版と考えてください。より速く、より公平です。アイテム(1行に1つ)を入力し、ボタンをクリックすると、完全にランダムな順序で返されます。このツールはフィッシャー・イェーツアルゴリズムを使用しており、コンピューターサイエンティストによって、各配置が等確率であることが証明されています。教室での選択、トーナメントブラケット、チーム編成、または偏りのないランダム化が必要な状況に最適です。
実世界の使用には「十分にランダム」です。最新のブラウザは、教育、ゲーム、意思決定に適した高品質の疑似乱数生成器(PRNG)を使用しています。
適している用途:教室活動、トーナメントのシード、パーティーゲーム、タスク順序付け。
適していない用途:宝くじシステム、暗号化キー、または予測不可能性が重要な場合。そのような稀なケースでは、専門のハードウェア乱数生成器が必要です。
もちろんです!「リストをランダム化」をもう一度クリックすると、完全に異なる配置が得られます。各シャッフルは独立しており、アルゴリズムは以前の結果を「記憶」しません。
興味深い事実:小さなリスト(5アイテムなど)では、可能な配置は120通りしかありません。そのため、純粋な偶然により、時々繰り返しが発生する可能性があります。大きなリストでは、繰り返しが起こる可能性は天文学的に低くなります。
重複は残ります。「リンゴ」を3回入力した場合、出力には3つすべてが含まれますが、異なる位置にシャッフルされます。アルゴリズムは、それらを別々のアイテム(「リンゴ」と書かれたアイテム1、「リンゴ」と書かれたアイテム2など)として扱います。
ユニークなアイテムのみが必要な場合:シャッフル前に入力リストから重複を削除してください。
明確な制限はありませんが、実用性が重要です。最新のハードウェアで5,000以上のアイテムをテストし、瞬時にシャッフルできました。数万のアイテムに達する場合、デバイスによっては短い遅延に気づく可能性があります。
典型的なユースケース(30〜40名の教室名簿、64人のトーナメント参加者、100アイテムのタスクリスト)では、パフォーマンスの問題は決して発生しません。
データはブラウザから一切出ません。これは完全にクライアント側のJavaScriptであり、リストアイテムがサーバーに触れることも、ログに記録されることも、保存されることもありません。タブを閉じれば、すべてが消えます。
プライバシーへの影響:機密性の高いリスト(従業員名、機密プロジェクトコードなど)に最適です。送信されないため、情報が漏洩することはありません。
すべて可能です。シャッフラーは任意のテキストを受け入れます:
各行が1つのアイテムになり、内容に関係なく処理されます。
ほとんどの実装では、空のエントリーを避けるために、空白行を自動的にフィルタリングします。プレースホルダーが必要な場合は、以下のように目に見えるものを使用してください:
並べ替えは、ルールに基づいて予測可能な順序を作成します(AはBの前、1は2の前)。同じ入力は常に同じ出力を生成します。
シャッフルは、ランダム性に基づいて予測不可能な順序を作成します。同じ入力は毎回異なる出力を生成します。
組織化が必要な場合は並べ替えを、公平性や多様性が必要な場合はシャッフルを使用してください。
はい。出力テキストを選択してコピー(Windows/LinuxではCtrl+C、MacではCmd+C)するだけです。結果はプレーンテキストなので、スプレッドシート、ドキュメント、メール、計画ツールなど、どこにでも貼り付けられます。
速度:デジタルシャッフルは0.05秒。手動シャッフル(紙に名前を書き、帽子に入れ、振って、引く)には5分以上かかります。
公平性:人間はランダム性が苦手です。無意識のうちに特定のパターンを好みます。フィッシャー・イェーツアルゴリズムは、数学的に偏りがないことが証明されています。
透明性:結果のスクリーンショットを撮って文書化できます。手動の方法では、常に誰かが選択を「操作した」と疑います。
まったくありません。フィッシャー・イェーツアルゴリズムは、アイテムの入力方法に関係なく、均一なランダム分布を保証します。アルファベット順、逆アルファベット順、完全にランダムに入力しても、シャッフルされた出力は同じ統計的特性を持ちます。
入力をきれいにする: 1行に1項目、余分な空白行なし。入力がきれいであれば、出力もきれいになります。
重複の扱い: "Sarah"を2回出現させたい場合は、重複を残します。各名前を1回だけにしたい場合は、シャッフル前に重複を削除します。
名前の一貫性を保つ: 学生をリストアップする場合、"John Smith"、"J. Doe"、"Rodriguez, Maria"を混ぜないでください。1つの形式を選んで一貫して使用します。
結果をすぐに保存 することが重要な場合は、スクリーンショットを撮るか、ドキュメントに貼り付けるなどして、結果を必ず記録してください。結果を文書化していなければ、後で公平性を証明できません。
方法を関係者に説明 します。「Fisher-Yatesアルゴリズムを実装したランダムシャッフラーを使用しました」と言い、単に「ランダム化しました」とは言わないでください。透明性は信頼を築きます。
違和感があれば再シャッフル します。50名をシャッフルしたときに、すべての女性が最下部に集中した場合、統計的には可能ですが、社会的に不適切です。再度シャッフルしてください。ランダム性は気にしません。
最新のブラウザが最適: Chrome、Firefox、Safari、Edgeはすべて優れた乱数生成を備えています。Internet Explorer 9を使用している場合は、アップグレードを検討してください。
大規模なリスト(1000以上のアイテム)は 過去10年のどのコンピューターでも問題なく動作します。2010年のネットブックで50,000アイテムをシャッフルする場合、1〜2秒待つ必要があるかもしれません。それだけです。
教室でのプレゼンテーションの割り当て、トーナメントの組織、または今夜何を見るか決めるのに、ランダムリストシャッフラーは選択からバイアスを取り除きます。高速で、数学的に公平、そして完全に無料で使用できます。
サインアップ不要、トラッキングなし、データ保存なし—1964年から金字塔となっているフィッシャー・イェーツアルゴリズムによる純粋なランダム化です。上記に項目を入力し、ミリ秒で結果を確認できます。
最適な用途: 生徒を公平に選ぶ教師、トーナメント主催者、チームのタスク割り当て、家族の意思決定、または手動方法の手間なく公平なランダム化が必要な人々。
ワークフローに役立つかもしれないさらなるツールを発見する