这个问题与水库采样解决的问题有点相似,但又不一样。我认为这也是一个相当有趣的问题。
我有一个大型数据集(通常有数亿个元素),我想估计这个数据集中唯一元素的数量。在一个典型的数据集中,可能有从几个到数百万个独特元素的任何地方。
当然,显而易见的解决方案是维护您遇到的元素的运行哈希集,并在最后对它们进行计数,这将产生准确的结果,但是当我扫描数据集(即到目前为止遇到的所有独特元素)。
不幸的是,在我的情况下,这需要比我可用的 RAM 更多的 RAM(数据集可能远大于可用 RAM)。
我想知道是否有一种统计方法可以让我对数据集进行一次遍历并在最后得出估计的唯一元素计数,同时在我扫描时保持相对少量的状态数据集。
该算法的输入将是数据集(Java 术语中的迭代器),它将返回估计的唯一对象计数(可能是浮点数)。假设可以对这些对象进行哈希处理(即,如果您愿意,可以将它们放入 HashSet 中)。通常它们是字符串或数字。