我一直在寻找最有效的(streaming ??)算法,该算法可以告诉我在任何时间点数据流中最常出现的“ k”个元素。这篇文章:“分而治之”的数据流算法使我对此感兴趣。
例如,假设有数字:(4,3,5,1,6,2,4,3,3,8,9,1)并且我查询了3个最频繁出现的数字(例如),那么我应该得到(3,4,1)作为答案。
我尝试在线搜索,但找不到任何可以提供方法的地方,并说那是最好的。一个简单的解决方案是使用堆或平衡的二叉树,但是我认为有更好的方法,我想知道它是否在某处记录了。
编辑:我正在寻找一种始终能给出正确答案的算法,而不是依赖某种或其他方式依赖数据分布的混合算法(其中很多出现在搜索结果中)