计数算法
问题一,判断一个字串的存在与否?
一般常规是使用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):
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号