鉴于单词大小未知,我需要在任何给定时间找到k个最频繁的单词,并且该程序应该能够运行很长时间。
我看到的帖子与我正在考虑的解决方案相似
The Most Efficient Way To Find Top K Frequent Words In A Big Word Sequence
How to find the most frequent element in a stream of numbers with additions and deletions allowed
但是我的问题是如何处理内存不足的问题
在帖子中,他们没有提及此问题。
所以我计划存储一个散列,其中键为单词,值为单词频率
还有一个最小的k堆,可以容纳最频繁的单词
对于每个单词,我将增加哈希中的计数,并检查是否可以将其输入到堆中
问题是
该程序应该能够运行很长时间,所以有可能我会以较小的频率听到不同的单词
并且我需要将它们保存在哈希中,以防频率稍后在流上增加
这会造成内存问题,因为随着时间的流逝,散列会变得很大
我想知道唯一的解决方案是删除某些单词吗?
(但这会更改计数)
我不确定如何处理,有什么建议吗?
答案 0 :(得分:3)
您可以使用trie。并存储到目前为止的出现次数。
以下树对应于以下输入:
ABL ABO AC AC AC ACR ACR
然后整理当前单词,您增加相应的计数器并检查它是否大于k个最频繁列表中最小的一个,如果是,请替换。
因此,您需要O(1)
时间来处理每个传入的字符。