有自然数 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