カードシャッフルアルゴリズムを書いているうちに、私は52があることに気付きました! 〜= 2^225可能なシャッフルが可能です。これを考えると、標準の32ビットまたは64ビットのシードを持つPRNGに基づくシャッフルアルゴリズムは、すべての可能なシャッフルのサブセットを生成することしかできないようです。私のプラットフォームは32ビットシードPRNG(POSIX srandom()/ random()関数のみ)を持っているので、これを創造的に使って任意の結果を生成できるシャッフルアルゴリズムを作成する方法があるのだろうかと思っていました。そうでなければ、私は自分自身を実装することができるいくつかの32ビット整数の合成であるシードを使用することができるPRNGアルゴリズムを知っていますか?52ビットデッキシャッフルの> 64ビットシードの疑似乱数ジェネレータ
答えて
現在の乱数ジェネレータを使用して問題を解決したい場合は、すべての可能なカードシャッフルのパラメータ空間をグループに分ける方法を見つけるだけで済みます。
(seed1)は、パラメータグループを定義
:あなたが唯一の1〜4とすることができるランダムシードが、12の可能な順列を有していたパラメータ空間を有する場合例えば、次の2つのランダムシードを使用して解決します(1-4,5-8、または9-12)
(seed2)は、どの要素が最終結果であるかを定義します。
(パラメータセットは、シードサイズの偶数倍である必要はありません。これはうまくいく)
私はこの方法をソリッドステートのphy sicsモデリング。これは厳密な数学的解法ですが、最も洗練されたソフトウェア解ではないかもしれません。頑張って。
完全な説明は長すぎるかもしれませんが、私は不思議です。ソリューションはなぜ機能しますか?あなたのソリューションは、同じジェネレータの乱数のペアを生成するという偽の解決策とどう違うのですか?結局、2つの異なるシードを使用しても、ジェネレータはそれほど決定的ではありませんか? (私はあなたが正しいと思っていますが、理由を学ぶことに興味があります) – thb
物理学では、問題のパラメータ空間はグループに分けられました。あなたのケースでは、おそらく、それぞれのカードシャッフルオプションを、カード1が置換されていない、カード2が置換されていないというようなケースで分割します。次に、カードが置換されていない1つの乱数を生成し、あなたが望むそのグループの特定の順列があります。 これは、これがランダムを多かれ少なかれ決定的に生成するとは思わない。そして、もしそうなら、それは私が学ぶことにとって重要であろう。 – theJollySin
これは原則として可能だと思います。私はこれが実際にカードをシャッフルする問題のために実際にどのように実装されるかについて考える必要があります。 – jjoelson
興味深い質問です。 Linuxの場合、/dev/urandom、さらには/dev/randomが適しています。これらのデバイスは、非同期ハードウェアイベントのタイミングによって供給される「エントロピープール」に依存しています。
しかし、またmrand48()cstdlibかstdlib.hで提示機能を家族、 Linux上かどうかを調査します。それは48ビットを得て、それはあなたが望むものに近くなります。
幸運。
- 1. C#/ XNA疑似乱数生成
- 2. 擬似乱数ジェネレータを計算可能な通常の数値
- 3. long doubleの(擬似)乱数ジェネレータのためのブーストの使用
- 4. Javaの乱数ジェネレータ
- 5. 組み込みシステムの暗号擬似乱数ジェネレータ?
- 6. 擬似乱数ジェネレータのビットをマスクする方法
- 7. 擬似乱数ジェネレータのカスタムシードを設定する方法
- 8. Javascriptの疑似乱数生成器はありますか?
- 9. CSS疑似クラスで混乱:アクティブ
- 10. C++ 11乱数ジェネレータのスレッドセーフ
- 11. 信頼できる疑似乱数を生成
- 12. セマフォと疑似乱数を使用した概念的マルチスレッド
- 13. MKLインテルC++および疑似乱数生成器
- 14. javascript非順列乱数ジェネレータ
- 15. スレッドセーフ一様乱数ジェネレータ
- 16. jQuery複数疑似クラス
- 17. 1つの乱数ジェネレータ対6
- 18. ワードプレスの疑似cron
- 19. リストの疑似クラス
- 20. シェルフスタッキングの疑似コード
- 21. この疑似GUIDジェネレータはmath.random()よりも優れていますか?
- 22. Excel疑似コード擬似コード
- 23. 疑似リアルタイムスレッド
- 24. 乱数ジェネレータをシードする方法は?
- 25. 乱数ジェネレータを使用するJava
- 26. 乱数ジェネレータが失敗する
- 27. 静的擬似乱数フィールドジェネレータ
- 28. Fortuneのアルゴリズムの疑似コード
- 29. c/Unixの複数の乱数ジェネレータの状態
- 30. matlabのメジアンフィルタと疑似メジアンフィルタ
内部状態が226ビットを超える多くのRNGがあります。おそらく最も人気が高いのは、メルセンヌツイスターとマルサグリアxorshift +です。 –