algorithm - 什么函数伪随机地重新排序 N 个项目?

标签 algorithm math set bijection

拥有从 1 到 N 的自然数(N 大约是 1e7),我梦想函数会以某种方式重新排序集合,定义由一组相当短的参数,与值(value)观。

对于 N = 2^i - 1 这可能只是位重新排序,因此,一组只有 i0..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/

相关文章:

algorithm - 证明决策概率在 NP 中

python - 查找两个不同列表中出现的唯一数字

Python多重交集

python - 合并具有限制的公共(public)整数对

algorithm - 你能使用权重来避免群体中的脑裂吗?

c++ - 实现 Bailey-Borwein-Plouffe

math - 为什么 powerset 给出 2^N 的时间复杂度?

algorithm - 将排名排列索引到其他排名排列

Python:只设置存在性检查?

algorithm - 为什么我们在寻找最大匹配时需要处理开花?