algorithm - Count-Min Sketch 和Heavy-Hitters 问题
问题描述
我正在阅读 Count-Min Sketch 数据结构,它根据错误概率参数和容差参数为点和范围查询提供概率答案。例如,CM 可以回答“项目 x 以 10% 的概率出现在数据流中的次数”这个问题。
重击者的相关问题也出现了。在为 HH 问题实现最小堆时,我注意到各种研究论文指出,只有当草图中项目的最小计数大于阈值时,我们才插入堆中。
我的问题是,这是否意味着我们正在概率性地回答重击手问题?相应的问题会是“有 10% 的概率,哪个项目是数据流中第二频繁的?”
解决方案
来自维基百科:
在数据流模型中,频繁元素问题是输出一组元素,这些元素构成了流的某个固定部分以上。一种特殊情况是多数问题,即确定任何值是否构成流的多数。
更正式地说,固定某个正常数 c > 1,令流的长度为 m,令 fi 表示值 i 在流中出现的频率。频繁元素问题是输出集合 { i | f > m/c }。
一些值得注意的算法是:
- Boyer-Moore 多数投票算法
- Karp-Papadimitriou-Shenker 算法
- Count-Min 草图
- 粘性抽样
- 有损计数
- 采样和保持
- 多级布隆过滤器
- 计数草图
- 草图引导采样
事件检测 检测数据流中的事件通常使用上面列出的重击算法:使用这些算法之一确定最频繁的项目及其频率,然后将前一个时间点的最大增加报告为趋势。这种方法可以通过使用指数加权移动平均值和方差进行标准化来改进。
所以,是的。CMS 可用于确定频率(以近似方式),可用于回答 HH 问题。
推荐阅读
- javascript - how to identify a child object by class-transformer ? | Nest.js
- java - 如何使用 zalando.logbook 屏蔽 xml 正文中的敏感数据
- xslt - XSLT 使用 xslt 2.0 或更高版本将纯文本文件处理为 XML
- javascript - 两个引导模式冻结页面
- spring - spring data jdbc有没有办法避免n+1问题?
- java - 如何在 Java AWT 中监听两个单独的按钮?
- excel - 从组合框中保存值,然后清除组合框
- c# - 根据数据库中的值拆分字符串
- ffmpeg - 通过将视频并排放置,将两个视频设备合并到第三个设备中
- powerbi - 如何在 PowerBI 中比较一个表中的列与另一个表中的列