大量随机生成数字中的重复项

Posted

技术标签:

【中文标题】大量随机生成数字中的重复项【英文标题】:Duplicates in big sets of random generated numbers 【发布时间】:2018-08-07 12:39:20 【问题描述】:

我们需要为请求生成随机数,并且这些请求可以由任何用户随时生成。这导致了问题,我们必须检查之前生成的数字是否有重复,因为生成的数字应该是唯一的,并且不允许重复。

每批随机生成的数字在 220-225 左右,生成的数字将检查前一批是否有重复。无法在特定区间内生成数字。

至于解决方案,我们希望对生成的随机数进行排序,然后与新生成的批次比较是否有重复项,但是对于排序算法而言,这将需要相当大的复杂度 O(nlogn)。 同样在使用 HashSets 的解决方案中,用于存储数字的内存会很大。

有没有办法提高这样的算法的效率?

【问题讨论】:

这些都是很多随机数!为什么不枚举您范围内的所有数字并将它们洗牌?然后,每当有请求进来时,您只需输出接下来的 n 个数字。 preshing.com/20121224/… 可能也值得一看 谢谢,最后一个链接似乎有助于解决一些问题。 【参考方案1】:

我认为,您可以对两个批次使用 Bloom 过滤器 - 当前和以前的批次。并在两者中搜索重复项。如果找到一个 dup(即使它是误报) - 丢弃它,并生成其他随机数,直到生成唯一的。

什么是布隆过滤器:https://en.wikipedia.org/wiki/Bloom_filter

另一种方法:您可以使用混淆非随机。例如 - 在 ECB 模式下使用 AES 加密序列号。这些数字看起来是随机的,但您可以肯定 - 加密的数字不会重复。

【讨论】:

以上是关于大量随机生成数字中的重复项的主要内容,如果未能解决你的问题,请参考以下文章

如何在C中的两个数字之间生成随机数? (内核)[重复]

随机数生成器不会使用输入字段中的值生成给定范围内的预期数字[重复]

C#如何生成随机不重复的数字

VBS产生随机不重复的数字

R语言使用random包生成随机数或者随机字符串实战:randomNumbers函数创建随机整数的数据集(包含重复项)randomSequence函数创建不含重复项的随机序列数据集创建随机字符串

php生成随机数字,范围1-100,每次生成一个数字,可以重复