1 から N までの自然数 (N は約 1e7) を持ち、値の範囲と比較して、かなり短いパラメーター セットによって定義される方法でセットを並べ替える関数を夢見ています。
N = 2^i - 1
これは単なるビットの並べ替えである可能性があるため、 の値のみのセットがミューi
テーションを0..i
定義します。
任意の N に適用できる、同様に美しい方法を探しています。
ビット並べ替えの例。8 つの値:0..7
は 3 ビットでエンコードされます: 000 – 111
. そのセットを並べ替えるために、各ビットの新しい位置を保存しました。配列[0,1,2]
を取得してランダムに並べ替え、その結果を順列キーとして保存します。つまり[1,0,2]
、次のように 8 つの値を並べ替えます。
210 201
0: 000 - 000 :0
1: 001 - 010 :2
2: 010 - 001 :1
3: 011 - 011 :3
4: 100 - 100 :4
5: 101 - 110 :6
6: 110 - 101 :5
7: 111 - 111 :7