Самый эффективный способ найти Top K частые слова вБольшой Последовательность слов

вопрос может быть описано как:Вход: положительное целое число K и большой текст. Текст может фактически рассматриваться как последовательность слов. Поэтому мы не должны беспокоиться о том, как сломать ее в word последовательность.Вывод: наиболее частые K слов в тексте.

Мое мышление, как этот.

1) использовать Хэш-таблицу для записи всех слов частоты, а через весь последовательность слов. На этом этапе клавиша "слово" и значение "слово-частота". Это требует O(n) времени.

2) боль (word, word-частота) пара; и ключ "слово-частота". Это требует O(n*lg(n)), с нормальным алгоритм сортировки.

3) После сортировки, мы просто сделайте первый K слов. Это занимает O(K) времени.

Итак, общее время O(n*lg(n) K)к вокзалу, Так как K, конечно, меньше, чем N, так что это на самом деле O(n*lg(n)).

Мы можем улучшить. На самом деле, мы просто хотим, чтобы топ-K слов. Другими словами' частота-это не забота о нас. Итак, мы можем использовать "частичной сортировки Кучи". Для шага 2) и 3), но мы предлагаем не только сортировка. Вместо этого, мы изменить ее будет

2') построить кучу (word, word-частота) пары "слово-частота" в качестве ключевых. Она занимает O(n) времени, чтобы построить кучу;

3') экстракт топ-K слов из кучи. Каждый добычи составляет O(lg n). Таким образом, общее время O(k*lg(n)).

Итак, этот затратами времени O(n k*lg(n)).

Это просто мои мысли. Я не выяснить способ улучшить шаг 1).Я Надеюсь, что некоторые Извлечения Информации экспертов, может пролить больше света на этот вопрос.Спасибо.

Найдено 7 ответов:

The Most Efficient Way To Find Top K Frequent Words In A Big Word Sequence

http://stackoverflow.com/questions/185697/the-most-efficient-way-to-find-top-k-frequent-words-in-a-big-word-sequence

Посмотреть решение →