不重复的随机数

2024-03-05

我需要生成大约 9-1 亿个不重复的随机数,范围从零到生成的数字数量,并且我需要它们非常快速地生成。对类似问题的几个答案提出了简单地对数组进行洗牌以获得随机数,而其他答案则提出使用布隆过滤器。问题是,哪一个更有效,如果是布隆过滤器,我该如何使用它?


你根本不需要随机数。您想要的数字恰好是 0 到 N-1,按随机顺序排列。

简单地填充数组并洗牌应该非常快。正确的 Fisher-Yates 洗牌时间复杂度为 O(n),因此在 C 甚至 Java 中,一亿个数组的时间应该远低于一秒,而在 Python 等高级语言中则稍慢一些。

您只需生成 N-1 个随机数即可进行洗牌(如果您使用拒绝采样来获得完美的均匀性,则可能高达 1.3N),因此速度很大程度上取决于您的 RNG 的速度。

您永远不需要查找数字是否已经生成;无论您使用哪种算法,这都会非常慢,尤其是在运行结束时。

如果您需要的总数略少于 N,请将数组从 0 填充到 N-1,然后提前中止洗牌并获取部分结果。仅当您需要的数字量与其范围相比非常小时,您才应考虑生成并检查重复方法。在这种情况下,鲍勃·弗洛伊德的算法可能会很好。

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

不重复的随机数 的相关文章

  • random.choice() 需要 2 个位置参数,但给出了 3 个

    当我输入以下内容时 rand num random choice 1 101 表明 TypeError choice takes 2 positional arguments but 3 were given 这些都放在函数中 我不明白为什
  • 朴素洗牌的现实问题

    我正在写一些文章 旨在通过使用与扑克相关的主题来教授入门编程概念 目前 我正在研究洗牌的主题 As 杰夫 阿特伍德 Jeff Atwood 在 CodingHorror com 上指出 http www codinghorror com b
  • 从数据帧中分层随机抽样

    我有一个格式为的数据框 head subset ants 0 1 1 0 1 age 1 2 2 1 3 lc 1 1 0 1 0 我需要根据年龄和 lc 创建带有随机样本的新数据框 例如 我想要来自age 1和lc 1的30个样本 来自a
  • 如何生成唯一的 6 位数代码

    我想生成 6 位唯一代码 但我希望前 3 个是字母 后 3 个是数字 如下例所示 AAA111 ABD156 DFG589 ERF542 请帮助使用上述组合创建代码 下面是我的代码 public function generateRando
  • 随机数独生成

    我正在编写一个函数 该函数应该为模拟项目生成随机数独谜题 该函数将要生成的单元格数量作为参数 然后生成单元格索引和要放入这些单元格中的数字 我在生成单元格索引时遇到问题 我不是编程专家 我找不到一个好的例程来生成索引并检查是否两次或更多次是
  • 为什么 Fisher Yates 是最有用的洗牌算法?

    您认为现代版本的 Fisher Yates 是最公正的洗牌算法吗 您如何解释数组中每个元素位于其原始位置的概率为 1 n 给定一个完美的伪随机数生成器 梅森扭转者 http en wikipedia org wiki Mersenne Tw
  • 使用 VBA 从分布生成随机数到内存

    我想从 VBA Excel 2007 中选定的分布生成随机数 我目前正在使用带有以下代码的分析工具库 Application Run ATPVBAEN XLAM Random A B C D E F Where A how many var
  • MySQL ORDER BY rand(),名称 ASC

    我想获取一个包含 1000 个用户的数据库并随机选择 20 个用户 ORDER BY rand LIMIT 20 然后按名称对结果集进行排序 我想出了以下查询not像我希望的那样工作 SELECT FROM users WHERE 1 OR
  • PHP 生成唯一的字符串

    我在表中有一个 ID 列 用于存储行 ID 号 自动递增 例如 1 2 3 我想生成一个随机且唯一的字符串 该字符串只能包含数字 字母 破折号 和下划线 字符串长度为4 6 且唯一 有人可以帮我如何生成吗 谢谢 使用这个 base conv
  • 这个简单的洗牌算法是否会返回一副随机洗牌的扑克牌? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 您有一个包含 52 张卡片的列表 其中列表中卡片的位置不会移动 您有第二个卡位置列表 首先 位置列表与第一个列表相同 迭代第一个列表 对于第一个列表中
  • BASH - 随机排列文件中字符串中的字符

    我有一个文件 filename txt 具有以下结构 gt line1 ABC gt line2 DEF gt line3 GHI gt line4 JKL 我想打乱字符串中的字符not开始机智 gt 输出将 例如 如下所示 gt line
  • python随机字典键,并访问它[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 import random Cards Spade 2 3 4 5 6 7 8 9 10 Jack Queen King
  • Random 并行生成数字 1 的次数超过 90% [重复]

    这个问题在这里已经有答案了 考虑以下程序 public class Program private static Random rnd new Random private static readonly int ITERATIONS 50
  • time() 会返回相同的输出吗?

    当用户注册时 我正在为 PHP 中的用户生成令牌 我想知道两个用户是否可以获得相同的令牌 因为这会破坏系统 请让我知道这是否足够 token md5 rand time 编辑 我现在正在使用我在另一个问题上找到的generate uuid
  • 如何使用 NumPy/SciPy 进行简单的高斯混合采样和 PDF 绘图?

    我添加三个正态分布以获得一个新的分布 如下所示 如何在python中根据这个分布进行采样 import matplotlib pyplot as plt import scipy stats as ss import numpy as np
  • 随机数生成器每次仅返回一个数字

    Python 是否有一个随机数生成器 每次只返回一个随机整数next 函数被调用 数字不应该重复并且生成器应返回区间内的随机整数 1 1 000 000 这是独一无二的 我需要生成超过一百万个不同的数字 这听起来好像非常消耗内存 以防所有数
  • 即使我调用 srand(time(NULL)) [重复],rand 函数在每次运行时都会给我相同的结果

    这个问题在这里已经有答案了 我有问题 我想使用rand 获得 0 到 6 之间的随机数 但每次运行它总是给我 4 即使我打电话srand time NULL include
  • 无需时间即可生成随机字符串?

    我知道如何使用 Runes 和播种 rand Init 在 go 中生成随机字符串time UnixNano 我的问题是 是否可以 使用 stdlib 在不使用当前时间戳 安全 的情况下播种 rand 此外 我问 因为仅仅依靠时间来为敏感操
  • 为什么 int 数组的最大大小小于 Int32.MaxValue? [复制]

    这个问题在这里已经有答案了 虽然这篇文章说它应该有效 https stackoverflow com questions 2338778 what is the maximum length of an array in net on 64
  • Scikit-learn、带有洗牌组的 GroupKFold?

    我正在使用 scikit learn 中的 StratifiedKFold 但现在我还需要观察 组 有一个很好的函数 GroupKFold 但我的数据非常依赖时间 与帮助中的相似 即周数是分组索引 但每周应该只折叠一次 假设我需要折叠 10

随机推荐