「Celestial Jukebox」のシャッフルをどのように実装しますか?
より正確には、各時刻 t で、0..n(t) の間の一様乱数を返します。これにより、シーケンス全体で繰り返しがなく、n() が時間とともに増加します。
具体的な例として、カタログ内の任意の曲を 0 ベースのインデックス番号で再生できる定額音楽サービスを想定します。インデックス番号の範囲を広げる新しい曲が頻繁に追加されます。目標は、毎回新しい曲を再生することです (カタログに重複がないことを前提としています)。
理想的なソリューションは、既存のハードウェアで実行可能です。8 MB の DRAM に 600 万曲のリストをどのように詰め込むのでしょうか? 同様に、曲数が多いと、O(n) 選択のタイミングが悪化します。
-- LCG ジェネレーターの場合、0..N 0で部分的に消耗した LCG を指定すると、0..N 1 (N1 > N0) で消耗したシーケンスを繰り返さない別の LCG に変換できます。
-- 特定の曲がすでに再生されているかどうかを確認することは、急速に手に負えなくなっているようですが、これが唯一の方法かもしれません。これに効率的なデータ構造はありますか?