gpt4 book ai didi

algorithm - 生成没有重复的随机序列

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:45:25 24 4
gpt4 key购买 nike

我在这里阅读了几篇关于生成无重复随机序列的文章(例如 Create Random Number Sequence with No Repeats )并决定根据自己的需要实现它

实际上它是一种算法,对当前计数器的位应用一些非破坏性(可逆)操作,以获得一个应该只出现一次的伪随机数。由于操作是可逆的,不同的源数会给出不同的结果数。

至少有几种可能的操作,如交换两位、反转一位、循环移位。如果我们只使用提到的那些,序列的质量不会很好,因为附近的计数器会产生具有相似数量的 0 和 1 的结果。真正的游戏规则改变者是一点一点地异或。现在序列看起来好多了,但问题是:

  • 是否有足够的操作的最小子集(例如反转位 + xor 位与另一位)并且添加任何其他操作只会使算法更难阅读,同时不会带来额外的好处
  • 我如何才能大致猜测给定范围内的操作数以使序列足够好。例如,对从 0 到 31 的数字进行 200 次运算可以得到视觉上不错的结果,但是对范围 0..199 进行 200 次运算有时会得到接近的数字 block 。
  • 是否有用于测试此类序列的算法或测试套件。我知道并使用过一次可以测试一般随机序列的套件,但这个是不同的,所以可能需要一些特殊套件或至少转换回一般随机世界

更新:正如我在此处的评论中发布的那样,已经有一个像这样的生成器:AES 加密,但不幸的是它只能用于 128 位范围。

谢谢

最大

最佳答案

问题:

生成 1 到 N 之间的唯一随机整数列表。

解决方案:

  1. 生成N个随机数;高斯或统一...
  2. 对它们进行排序;保存索引(即列表中每个值的位置)
  3. 排序的索引就是您的列表。

在 Matlab 中:

z = rand( [N 1] );
[dummy iz] = sort(z);

% iz 是您的列表。

关于algorithm - 生成没有重复的随机序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3864155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com