我记得几年前听说过以下算法,但在网上找不到任何相关的参考资料。它可以仅使用m个计数器,在n个元素的数据流中识别前k个元素(或热门项目)。这对于在使用最小内存的情况下查找顶级搜索词、网络滥用者等非常有用。
算法步骤如下:
但我想了解更多有关其概率特性的信息-如果我只对前100个项目感兴趣,使用1000个计数器而不是100个计数器会产生什么影响?
算法步骤如下:
- 对于每个元素:
- 如果该元素尚未具有计数器,且计数器数量 m,则为该元素创建一个计数器并将其初始化为1。
- 否则,如果该元素已具有计数器,则递增该计数器。
- 否则,如果该元素没有计数器且计数器数量 > m,则递减现有计数器c。如果c达到0,则用当前元素替换其相应的元素。(c是现有计数器列表中的索引,其中c每当达到此步骤的每个元素时以轮换方式增加。)
但我想了解更多有关其概率特性的信息-如果我只对前100个项目感兴趣,使用1000个计数器而不是100个计数器会产生什么影响?