任意のシード値が与えられた場合、線形時間と定数空間 (出力が反復的に生成される場合) でシャッフルされた範囲 [0..n) を生成できる既知のアルゴリズムはありますか?
n が数百万のように大きいと仮定すると、すべての可能な順列を潜在的に生成する必要はありません。特に、それは実行不可能です (シード値のスペースが巨大である必要があるため)。これは、一定のスペースが必要な理由でもあります。(したがって、範囲を長さ n の配列に格納する必要があり、線形空間を使用するため、特に配列シャッフル アルゴリズムを探しているわけではありません。)
私は質問 162606を認識していますが、この特定の質問に対する回答は提示されていません。その質問で指定された順列インデックスから順列へのマッピングには、巨大なシード値スペースが必要になります。
理想的には、周期と範囲がのLCGのように機能しますが、 LCGn
を選択する技術は微妙です。LCG の全期間の制約を満たすだけで、私の要件を満たすことができるかもしれませんが、他にもっと良いアイデアがあるかどうか疑問に思っています。a
c
a
c