大量随机生成数字中的重复项
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 加密序列号。这些数字看起来是随机的,但您可以肯定 - 加密的数字不会重复。
【讨论】:
以上是关于大量随机生成数字中的重复项的主要内容,如果未能解决你的问题,请参考以下文章
随机数生成器不会使用输入字段中的值生成给定范围内的预期数字[重复]
R语言使用random包生成随机数或者随机字符串实战:randomNumbers函数创建随机整数的数据集(包含重复项)randomSequence函数创建不含重复项的随机序列数据集创建随机字符串