HyperLogLog估计多集的基数。是否可以扩展它以处理多个多重集?就像,它不支持查询estimateCardinality(),而是支持estimateCardinality(multiset_id)。我试图避免为每个multiset_id提供HyperLogLog值的字典。
是否有其他方法(数据结构)来实现这一目标?
答案 0 :(得分:2)
当你的基数较大且多方差较大时,以下想法可能会有所帮助;也就是说,有些尺寸较大,有些尺寸较小。它不需要您事先估计哪个会很小而哪个会很大。
您可以通过一些小改动来构建Linear Probabilistic Counter。原始数据结构在每个位置都有一个(逻辑)布尔值。在这里,每个职位本身都是一个集体。
而不是设置一点insert(element)
如果它落在这个位置,你可以将id
插入到
insert(element, id)
为了节省空间,你应该做一些常识性的技巧。例如,你可以决定如果id
出现在某个部分的bin中,那么它不会存储在bin集中,而是存储在所有bin中的单独位图中。
总的来说,如果你同时拥有小集和大集,你最终会得到以下结论:
每个大集合的位图(这与您的计数器词典的每个项目的成本相同)
某些位中的条目'为每个小集合设置(可能比你的专柜词典小得多)
由于数据结构可以针对特定的多个集合从后者切换到前者 - 它可以相对于计数器想法字典节省空间,这可能被认为是过早的悲观化。
因人而异。