19
在大单词序列中查找前K个常见单词的最有效方法
输入:正整数K和大文本。文本实际上可以视为单词序列。因此,我们不必担心如何将其分解为单词序列。 输出:文本中最常见的K字。 我的想法是这样的。 使用哈希表记录遍历整个单词序列时所有单词的频率。在此阶段,键是“单词”,值是“单词频率”。这需要O(n)时间。 对(单词,单词频率)对进行排序;关键是“单词频率”。使用常规排序算法,这需要O(n * lg(n))时间。 排序后,我们只取前K个字。这需要O(K)时间。 总而言之,总时间为O(n + n lg(n)+ K),因为K肯定小于N,所以实际上为O(n lg(n))。 我们可以改善这一点。实际上,我们只想要前K个字。换句话说,频率与我们无关。因此,我们可以使用“部分堆排序”。对于步骤2)和3),我们不只是进行排序。相反,我们将其更改为 2')以“ word-frequency”为关键字构建(word,word-frequency)对的堆。构建堆需要O(n)时间; 3')从堆中提取前K个字。每次提取为O(lg(n))。因此,总时间为O(k * lg(n))。 总而言之,该解决方案花费时间O(n + k * lg(n))。 这只是我的想法。我还没有找到改善步骤1)的方法。 我希望一些信息检索专家可以对这个问题有更多的了解。