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

时间:2018-08-07 12:39:20

标签: algorithm performance duplicates bigdata

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

每批随机生成的数字大约在2 20 -2 25 左右,生成的数字将检查每个前一批是否重复。无法在特定间隔内生成数字。

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

有什么方法可以提高这种算法的效率吗?

1 个答案:

答案 0 :(得分:1)

我认为,您可以对两个批次使用Bloom过滤器-当前批次和先前批次。并在两者中搜索重复项。如果找到了dup(即使它是假阳性),则将其删除并生成其他随机数,直到生成唯一。

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

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