0

インデックスで調べることができるビットの疑似乱数ソースが必要です。私の特定のユースケースは、プレイリストのランダム再生です。最初に曲が再生された順序を保存せずに、以前の曲に巻き戻したいと考えています。ほとんどの RNG は、生成される新しい乱数ごとに変更される状態で動作し、以前の状態を簡単に取得することはできません。

今、私はこの考えを持っていました: シードの場合に何らかの並べ替えを使用し、それからハッシュ コードを計算します。ハッシュコードのビットが使い果たされた後、シードを増やし、次のハッシュを計算します。シードは可逆的にのみ変更されるため、古いハッシュ コードと「ランダムな」ビットを取得できます。

さて、私の実際の質問: 理論的な観点から、これはどのくらいランダムですか? 音楽プレイリストにとってはそれほど重要ではありませんが、私はまだ興味があります。公平性が問題となるコンピュータ ゲーム アプリケーションも想像できます。

明らかに、エントロピーはあまり関係ありませんが、(暗号化された) ハッシュ関数は、1 ビットの変化に対してまったく異なる出力を持つと想定されています。シードに対して、1 ずつ増やす以外の可逆的な操作を行うことで、ランダム性を向上させることはできますか?

4

1 に答える 1

2

良いアイデア。多くの乱数を生成したい場合は、少しやり過ぎかもしれません。

結果が本当に「ランダム」かどうかは、使用する暗号化アルゴリズムによって異なります。良い 1 回 (SHA など) では、均等に分布する結果が得られます。等配分は、そのようなアルゴリズムの要件の 1 つです。

暗号化/ハッシュ アルゴリズムは、乱数ジェネレーターよりもはるかに複雑であることに注意してください。したがって、そのような数の大量の生成が問題になります。これはゲームに影響を与える可能性がありますが、おそらくプレイリストの生成には問題ありません。

ところで:あなたは見たことがありますかCollections.shuffle()。それはあなたの生活を楽にするかもしれません。

于 2013-10-02T09:15:24.627 に答える