【发布时间】:2017-10-22 01:54:21
【问题描述】:
我遇到过Flajolet-Martin算法、HyperLogLog等多种算法从元素列表中找出唯一元素,突然好奇Java是如何计算的?在每种情况下存储和查找唯一值的时间复杂度是多少?
【问题讨论】:
-
java.util.Set 是一个接口,而不是一个实现。 JDK 库中有两个常用的实现:java.util.TreeSet 和 java.util.HashSet。他们都没有使用 HyperLogLogs。
-
我也不确定这将如何适用于 java.util.Set 接口,因为 API 需要保留所有元素,并且它需要唯一性。 HyperLogLog 算法会在 multi 集合(一个包)中有太多元素无法同时保存在内存中时估计其基数。
-
就在名字里。 HashSet 使用哈希表。 TreeSet 使用树。
-
Flajolet-Martin 算法或 HyperLogLog 都不适合 Map 数据结构。它们是关于计数流中不同的元素。
-
为什么不自己看看呢? JDK 是开源的。来源是here
标签: java set time-complexity big-o hyperloglog