問題タブ [shuffle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
3540 参照

ruby - 配列要素のランダム化

私は配列を持ってい@number = [1,2,3,4,5,6,7,8,9]
ます 今、私は配列の内容をランダム化したいです... 例のようなもの:[5,3,2,6,7,1,8]
それを進める方法を教えてください。

0 投票する
5 に答える
1480 参照

algorithm - 偏ったランダムシャッフルを繰り返すと偏りが減りますか?

バイアスを最小限に抑えて、高速ランダム シャッフルを繰り返し生成したいと考えています。

基本的な乱数発生器 (RNG) がバイアスされていない限り、 Fisher-Yates シャッフルがバイアスされていないことが知られています。

しかし、RNG が偏っている (しかし高速である) 場合はどうなるでしょうか?

25 要素の配列のランダム順列を多数生成したいとします。偏った RNG で Fisher-Yates アルゴリズムを使用すると、順列に偏りが生じますが、これは、シャッフル アルゴリズムを適用する前に、25 要素の配列が同じ状態から始まることを前提としていると思います。たとえば、1 つの問題は、RNG の周期が 2^32 ~ 10^9 しかない場合、これは 25 であるため、25 要素のすべての可能な順列を生成できないことです! ~ 10^25 順列。

私の一般的な質問は、Fisher-Yates シャッフルの新しいアプリケーションを開始する前に、シャッフルされた要素をシャッフルしたままにしておくと、バイアスが減少し、アルゴリズムがすべての順列を生成できるようになるかということです。

私の推測では、一般的にはより良い結果が得られると思いますが、繰り返しシャッフルされる配列に、基礎となる RNG に関連する多数の要素が含まれている場合、順列が実際には予想よりも頻繁に繰り返される可能性があるようです。

これに対処する研究を知っている人はいますか?

サブ質問として、配列内の 25 個の要素のうち 5 個の順列を繰り返したい場合はどうすればよいので、Fisher-Yates アルゴリズムを使用して 5 個の要素を選択し、完全なシャッフルを行う前に停止しますか? (スワップされた配列の最後にある 5 つの要素を使用します。) 次に、以前の部分的にシャッフルされた 25 要素の配列を使用して、5 の別の順列を選択します。基になる RNG にバイアスがある場合は、元の 25 要素の配列。これについて何か考えはありますか?

25 要素のうち 5 要素の可能な順列は 6,375,600 しかないため、部分シャッフルのケースをテストする方が簡単だと思います。バイアスをチェックするために使用する簡単なテストはありますか?

0 投票する
6 に答える
15267 参照

python - NumPy 配列からセルをランダムに選択 - 置換なし

NumPy 配列からセルをランダムに選択し、それらに対して何らかの処理を行う必要があるいくつかのモデリング ルーチンを NumPy で作成しています。すべてのセルは置換せずに選択する必要があります (セルを選択すると、再度選択することはできませんが、最後までにすべてのセルを選択する必要があります)。

これを行う良い方法を見つけることができるIDLから移行していますが、NumPyにもこれを行う良い方法があると思います。何を提案しますか?

更新: 2D 配列でこれを実行しようとしているため、2D インデックスのセットを取得しようとしていると述べるべきでした。

0 投票する
4 に答える
1293 参照

c# - c# ブラックジャック - ヘルプが必要

この C# プログラムはブラックジャック プログラムであると思われますが、カードを「シャッフル」して「手」を表示する必要があります。

残りは管理できると思います...誰か助けてくれませんか?

0 投票する
4 に答える
15480 参照

algorithm - このシャッフルアルゴリズムのどこが間違っているのでしょうか。どうすればわかりますか。

背景と同じように、私はフィッシャー-イェーツの完璧なシャッフルを知っています。これは、O(n)の複雑さと保証された均一性を備えた優れたシャッフルであり、アレイのインプレース更新を許可する環境では使用しないのはばかだと思います(したがって、すべてではないにしても、ほとんどの場合、命令型プログラミング環境)。

悲しいことに、関数型プログラミングの世界では、可変状態にアクセスできません。

ただし、Fisher-Yatesのおかげで、シャッフルアルゴリズムの設計方法について私が見つけることができる文献は多くありません。それに対処するいくつかの場所は、事実上、「あなたが知る必要があるすべてのシャッフルであるフィッシャー-イェーツです」と言う前に、簡単にそうします。結局、私は自分自身の解決策を考え出さなければなりませんでした。

私が思いついた解決策は、データのリストをシャッフルするために次のように機能します。

  • リストが空の場合は、空のセットを返します。
  • リストに単一のアイテムがある場合は、その単一のアイテムを返します。
  • リストが空でない場合は、乱数ジェネレーターを使用してリストをパーティション化し、アルゴリズムを各パーティションに再帰的に適用して、結果を組み立てます。

Erlangコードでは、次のようになります。

(これがあなたにとって混乱したクイックソートのように見えるなら、まあ、それは基本的にそれが何であるかです。)

だからここに私の問題があります:フィッシャー-イェーツではないシャッフルアルゴリズムを見つけることを困難にする同じ状況は、シャッフルアルゴリズムを分析するためのツールを見つけることを同様に困難にします。PRNGの均一性、周期性などの分析については多くの文献がありますが、シャッフルの分析方法に関する情報はあまりありません。(確かに、シャッフルの分析で見つけた情報の一部は、まったく間違っていました。簡単な手法で簡単にだまされてしまいました。)

だから私の質問はこれです:シャッフルアルゴリズムをどのように分析しますか(そこにrandom:uniform()呼び出されたのは、優れた特性を持つ適切な乱数を生成するタスクまでであると仮定します)?たとえば、1..100の範囲の整数のリストでシャッフラーを100,000回実行すると、おそらく良好なシャッフル結果が得られたかどうかを判断するために、どのような数学ツールを自由に使用できますか?私は自分でいくつかのテストを行いました(たとえば、シャッフルの増分と減分を比較します)が、もう少し知りたいです。

そして、そのシャッフルアルゴリズム自体についての洞察があれば、それもありがたいです。

0 投票する
4 に答える
29006 参照

java - 配列でCollections.shuffle()が失敗するのはなぜですか?

コードが機能しないのはなぜですか?

結果は次のとおりです。0123 4 5 6 789。

ランダムにシャッフルされたシーケンスを期待していました。

0 投票する
3 に答える
141 参照

c# - 効果のないアレイシャッフラー

配列をシャッフルしようとしていますが、その方法は5回ごとにしか機能しません。誰かがそれが適切に機能していない理由を説明し、おそらく微調整を提案していただければ幸いです。

0 投票する
3 に答える
28009 参照

c++ - カードのデッキをシャッフルする

C++プログラム用のDeckクラスを作成しています。2つの方法が必要です。1つはデッキの一番上からカードをポップする方法、もう1つはデッキをシャッフルする方法です。私は後者に関心があります。

カードは1から52までの整数で表されます。デッキをシャッフルするための最速のアルゴリズムは何ですか(「良い」レベルのランダム性を想定)?

0 投票する
6 に答える
772 参照

ruby - ルビーの「シャッフル」コードを手伝ってください

これが質問です

シャッフル。新しいソート アルゴリズムが完成したので、逆のアルゴリズムはどうでしょうか。配列を取り、完全にシャッフルされたバージョンを返すシャッフル メソッドを記述します。いつものように、あなたはそれをテストしたいと思うでしょうが、これをテストするのはよりトリッキーです: 完璧なシャッフルが得られていることを確認するにはどうすればテストできますか? 完璧なシャッフルとは何だと思いますか? 今それをテストします。

これは私のコードの答えです:

私の間違いは何ですか?このコードが機能しないのはなぜですか?

0 投票する
1 に答える
1276 参照

java - Javaの2次元配列でこの質問を完了するにはどうすればよいですか?

やあみんな、Javaのプログラミング入門の本を読んでいて、演習の1つはこれです:

経験的なシャッフルチェック。計算実験を実行して、シャッフルコードが宣伝どおりに機能することを確認します。コマンドライン引数MおよびNを取り、各シャッフルの前にa [i] = iで初期化されるサイズMの配列のNシャッフルを実行し、行iのようにM行M列のテーブルを出力するプログラムShuffleTestを記述します。すべてのjについて、位置jに巻き上げられた回数を示します。配列内のすべてのエントリはN/Mに近い必要があります。

さて、このコードはゼロのブロックを出力するだけです...

私は何が間違っているのですか?:(

ありがとう