计数算法
问题一,判断一个字串的存在与否?
一般常规是使用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):
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步