我需要在流中存储前 k 个最频繁的元素。为了估计频率,我使用 count-min-sketch 算法。我的流由键(作为字符串)组成。所以基本上每次我在我的流中遇到一个新键时,我都会通过查看 count-min-sketch 数据结构来计算到目前为止当前键的频率。但是我无法存储前 k 个最常用的键。
我的第一个想法是将它们存储在一个固定大小为 k 的最小堆中。我将 [频率,键] 存储在这个最小堆中,并使用比较器比较频率。因此,每次我获得一个键的频率时,我都会尝试查看堆大小是否超过 k,如果是,那么我将当前键的频率与最小堆中的最高(最小)频率进行比较,如果我当前的键是频率较大然后我弹出顶部,并将我的密钥插入堆中。
但是我意识到最小堆不是一个集合,这意味着它允许重复。假设我有一个非常热的键,并且我一直在流中计算它,所以每次我将这个 [频率,键] 插入堆中时,最终我的堆将充满相同的键,只是频率不同。
所以我想知道有没有一种好方法可以在 count-min-sketch 中存储前 k 个不同的更频繁的元素。
开心每一天1111
猛跑小猪
慕哥9229398
随时随地看视频慕课网APP
相关分类