有一个动态变化的大词汇文件,我们不断地向其中添加一些单词。您如何跟踪每个时刻的前10个流行词?
我在一篇博客中找到了这个问题,但我无法理解答案。 答案是:哈希表 + 最小堆。
我明白了哈希表为什么要用,但对最小堆部分不理解,有人可以帮助我吗?
有一个动态变化的大词汇文件,我们不断地向其中添加一些单词。您如何跟踪每个时刻的前10个流行词?
我在一篇博客中找到了这个问题,但我无法理解答案。 答案是:哈希表 + 最小堆。
我明白了哈希表为什么要用,但对最小堆部分不理解,有人可以帮助我吗?
O(n)
吗?你必须先在最大堆中找到 x
,但你不知道它在哪里。一旦找到它,增加它并将其上移是一个 O(lgn)
操作。 - B-Conmax-heap
和hash-table
指向相同的元素x
,因此无需在哈希表中再次查找。我会修复它,谢谢。 - Avi Cohen如果您只想保留前10个,使用最大堆是过度的。将这10个条目保存在已排序的数组中将更简单、更快。
对于排序,只需从数组底部开始使用插入排序即可。您将需要检查候选项是否已经在前十名中,如果需要,则更新其位置。