input:一个正整数K和一个大文本。 文本实际上可以被视为单词序列。 所以我们不必担心如何把它分解成单词序列。 输出:文本中最常见的K个单词。 我的想法是这样的。 使用哈希表来logging所有单词的频率,同时遍历整个单词序列。 在这个阶段,关键是“文字”,其值是“文字频率”。 这需要O(n)时间。 (字,词频)对; 关键是“词频”。 这需要O(n * lg(n))时间与正常sortingalgorithm。 sorting后,我们只需要第一个K字。 这需要O(K)时间。 总的来说,总的时间是O(n + n lg(n)+ K),由于K肯定小于N,所以它实际上是O(n lg(n))。 我们可以改善这一点。 其实我们只是想顶K字。 换句话说,频率并不是我们所关心的。 所以,我们可以使用“部分堆sorting”。 对于步骤2)和3),我们不只是做分类。 相反,我们改变它 2“)build立一个以”word-frequency“作为关键字的(word,word-frequency)对。 需要O(n)时间来build立一个堆; 3')从堆中提取顶部K个单词。 每个提取是O(lg(n))。 所以总的时间是O(k * lg(n))。 总而言之,这个解决scheme的耗时为O(n + k * lg(n))。 这只是我的想法。 我还没有find办法来改善步骤1)。 我希望一些信息检索专家能够更清楚地了解这个问题。
我必须使用python来计算文本中的单词频率。 我想在词典中保留单词,并为每个单词计数。 现在,如果我不得不按照出现的次数来sorting这些单词。 我可以用同一个词典来做,而不是使用一个新的字典,这个字典有作为字数和字数的关键字的关键字吗?