生成没有重复的随机序列

2024-01-06

我在这里读了几篇关于生成不重复的随机序列的文章(例如创建不重复的随机数序列 https://stackoverflow.com/questions/693880/create-random-number-sequence-with-no-repeats)并决定根据我自己的需要来实现它

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

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

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

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

Thanks

Max


Problem:

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

解决方案:

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

在Matlab中:

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

% iz 是您的列表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生成没有重复的随机序列 的相关文章

  • 什么是确定性快速排序?

    我一直在阅读有关快速排序的内容 发现有时它被称为 确定性快速排序 这是普通快速排序的替代版本吗 普通快速排序和确定性快速排序有什么区别 普通 确定性 快速排序在特定数据集上的行为可能非常差 例如 选择第一个未排序元素的实现在已排序数据上的时
  • 数组中的重复元素[重复]

    这个问题在这里已经有答案了 这有点与this https stackoverflow com questions 2605766 how to find a duplicate element in an array of shuffled
  • 优化 HTML 属性压缩顺序

    我在某处读到 按一定顺序组织 HTML 属性可以提高 HTML 文档的压缩率 我想我是从 Google 或 Yahoo 推荐的更快网站上读到这篇文章的 如果我没记错的话 建议是将最常见的属性放在第一位 例如id等 然后将其余的按字母顺序排列
  • 用于基本要素匹配的最坏情况 NlogN 算法

    查找两个相同大小数组的元素之间的唯一映射 https stackoverflow com questions 4411940 find the unique mapping between elements of two same size
  • 给定一个点向量(可能无序),找到多边形(不是凸包)

    我目前有一个点向量 vector
  • 图像算法上的物体计数

    我又接到学校任务了 这次 我的老师给我的任务是创建算法来计算图片上有多少只鸭子 该图与此类似 我想我应该使用模式识别来搜索上面有多少只鸭子 但我不知道每只鸭子适合哪种图案 我认为你可以通过分割鸭嘴并计算鸭嘴的数量来解决这个问题连接的组件 h
  • 用于计算三角函数、对数或类似函数的算法。仅限加减法

    我正在修复 Ascota 170 古董机械可编程计算机 它已经开始工作了 现在我正在寻找一种算法来展示其功能 例如计算三角或对数表 或类似的东西 不幸的是 从数学运算来看 计算机只能进行整数的加减法 从 1E12到1E12的55个寄存器 甚
  • 运行时间为 O(n) 且就地排序的排序算法

    有没有运行时间为O n 并且还分类到位 在某些情况下 最好的情况是 O n 但这可能是因为项目集合已经排序 你正在看 O nlogn 一些较好的平均值 话虽如此 排序算法的 Wiki 还是相当不错的 有一个表格比较了流行的算法 说明了它们的
  • C++11 随机数

    我需要生成随机数 但范围尽可能广泛 至少 64 位 我不在乎分布是否完美 所以std rand 会起作用 但它只返回一个int 据我所知 c 11 具有一些随机数生成功能 可以给出任何大小的数字 但使用起来非常复杂 有人可以发布一个简单的示
  • 神经网络的层和神经元

    我想更多地了解神经网络 我正在开发一个 C 程序来制作神经网络 但我坚持使用反向传播算法 很抱歉没有提供一些工作代码 我知道有很多库可以用多种语言创建神经网络 但我更喜欢自己制作一个 关键是我不知道要实现特定目标 例如模式识别或函数近似或其
  • 内存高效的随机数迭代器,无需替换

    我觉得这应该很容易 但经过多次搜索和尝试后我找不到答案 基本上 我有大量的物品 我想以随机顺序进行采样 而不需要更换 在本例中 它们是二维数组中的单元 我用于较小数组的解决方案不会转换 因为它需要对内存数组进行改组 如果我必须采样的数量很小
  • 有效地合并两个数组 - 一个已排序,另一个未排序

    我正在解决一个问题 该问题有一个由 n 个元素组成的排序数组 后跟一个未排序的长度数组 O logn O 平方 n 如何最有效地对整个列表进行排序 在上述两种情况下我应该使用哪种排序 由于将单个元素插入数组并保持其排序是O n 你不可能变得
  • 线段树java实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 你知道 二进制 的良好实现吗线段树 http en wikipedia org wiki Segmen
  • 简单的排名算法

    我需要创建一个民意调查 按照项目的好坏顺序创建一个排名列表 我打算向每个用户展示两个项目 让他们选择一个他们认为更好的项目 然后多次重复这个过程 它有点类似于您在社交网络电影 我应该如何根据收到的答案对项目进行排名 看着那 这ELO国际象棋
  • 互补DNA序列

    我在编写这个循环时遇到问题 它似乎在第二个序列之后停止了 我想返回给定 DNA 序列的互补 DNA 序列 例如 AGATTC gt TCTAAG 其中 A T 和 C G def get complementary sequence dna
  • 创建一个具有相同定义域和值域的随机双射函数

    创建一个具有相同定义域和值域的随机双射函数 我所说的随机双射函数是指使用随机算法 或至少是伪随机算法 将元素从域映射到范围的函数 而不是像 x y 这样的函数 域和范围有时可能是一个非常小的集合 例如 1 2 3 4 5 因此配对函数将不起
  • 如何将多边形放入另一个多边形内[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有两个多边形 如下图所示 左边是 粗多边形 右边是 最终多边形 现在 我正在寻找算法来将 最终多边形 拟合到 粗糙多边形 内 并具有
  • LRU算法,实现这个算法需要多少位?

    我有一个关于 LRU 算法的小问题 如果您有一个包含四个块的高速缓存 那么需要多少位来实现该算法 假设您指的是 4 路组关联缓存 完美 LRU 本质上是按照使用顺序为每一行分配一个精确的索引 您也可以将其视为 年龄 因此 4 个元素中的每一
  • 如何在C中实现带连分数的自然对数?

    这里我有一个小问题 根据这个公式创建一些东西 这就是我所拥有的 但它不起作用 弗兰基 我真的不明白它应该如何工作 我尝试用一 些错误的指令对其进行编码 N 是迭代次数和分数部分 我认为它会以某种方式导致递归 但不知道如何 谢谢你的帮助 do
  • Java 2d 游戏中的路径查找?

    本质上它是我正在开发的一款吃豆人克隆游戏 我有一个 Enemy 类 并创建了该类的 4 个实例 它们都代表游戏的 4 个幽灵 所有幽灵都会在屏幕的随机区域启动 然后它们必须朝着吃豆人角色前进 当玩家控制吃豆人并移动它时 他们应该跟随它并尽可

随机推荐