我们需要在请求上生成随机数,任何用户都可以随时生成这些请求。这导致了问题,我们必须检查以前生成的数字是否有重复,因为生成的数字应该是唯一的,不允许有重复。
每一批随机生成的数字约为220-225,生成的数字将检查前一批是否有重复。数字不能在特定的时间间隔内生成。
至于解决方案,我们希望对生成的随机数进行排序,然后与新生成的批次进行重复比较,但对于排序算法来说,这将需要相当大的复杂性O(nlogn(。此外,在使用HashSets的解决方案中,用于存储数字的内存将非常大。
有什么方法可以提高这种算法的效率吗?
我认为,您可以对两个批次使用Bloom过滤器——当前批次和以前批次。并在两者中搜索重复项。如果发现一个dup(即使它是假阳性(,将其丢弃,并生成其他随机数据,直到生成唯一数据。
什么是Bloom过滤器:https://en.wikipedia.org/wiki/Bloom_filter
另一种方法:可以使用模糊的非随机。例如,在ECB模式下使用AES加密序列号。这些数字看起来是随机的,但你会确信加密的数字不会重复。