拥有从 1 到 N 的自然数(N 大约是 1e7),我梦想函数会以某种方式重新排序集合,定义由一组相当短的参数,与值(value)观。
对于 N = 2^i - 1
这可能只是位重新排序,因此,一组只有 i
值 0..i
定义突变。
我正在寻找一种类似的美丽方式,适用于任意 N。
位重排序示例。 8 个值:0..7
用 3 位编码:000 – 111
。为了重新排序该集合,我存储了每一位的新位置。取一个数组 [0,1,2]
并对其随机重新排序,然后将结果存储为排列键。 IE。 [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
最佳答案
如评论中所述,您对能够使用短 key 对 N!
排列中的任意一个进行编码不感兴趣;您只是在寻找一种方法来确定性地选择给定短 key 的排列。
我建议你要做的就是
- 选择您最喜欢的伪随机数生成器;
- 用你已知的短 key 为它播种
- 使用它从
N
项列表中选择值
关于algorithm - 什么函数伪随机地重新排序 N 个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31693675/