计数算法

问题一,判断一个字串的存在与否?

一般常规是使用HashSet.

但是,随着量的增长,性能也线性降低,同时JVM内存使用不断膨胀,最终无法承受,如下图所示:

 

1.Bloom filter算法

基于bit位数组与Hash functions。这种算法虽然高效,但并非精确,会有一定的误差。对于要求不是很精确,但内存很小的情况下可用,同时也是可以调整误差率。

 建议值:

问题二,计数,出现的次数?

一般用:

但是大量的数也会使其不堪重负:

算法1,CountMinSketch

 CountMinSketch cms=new CountMinSketch(100,100,2);
cms.add(1,2);
cms.add(2,5);
cms.add(4,8);
cms.add(8,20);
cms.add(2,10);
long cntOf2= cms.estimateCount(2);
System.out.println("the count of 2 is :"+cntOf2);

HyperLogLog 用于计算 基(cardinality):

原文地址:https://www.cnblogs.com/itdev/p/7148529.html