Найти Top K Частые слова в большом потоке слов - PullRequest
1 голос
/ 13 мая 2019

учитывая поток слов неизвестного размера, мне нужно найти k наиболее часто встречающихся слов в любой момент времени, и программа должна иметь возможность работать в течение длительного времени.

Я видел сообщениеэто похоже на решение, о котором я думаю
Самый эффективный способ найти наиболее часто встречающиеся слова в большой последовательности слов
Как найти наиболее частый элемент впоток чисел с добавлением и удалением разрешен
, но моя проблема в том, как я решаю проблему нехватки памяти
в сообщениях, они не упоминают эту проблему.

, поэтому я 'Я планирую сохранить хэш с ключом в качестве слова и значение в качестве частоты слов и минимальную кучу размера k, в которой будут храниться наиболее часто встречающиеся слова
, и для каждого слова я буду увеличивать количество в хэше и проверятьесли я могу ввести его в кучу

, проблема в том, что программа должна работать долго, поэтому есть вероятность, что я получу разные слова с небольшой частотой
, и янужно сохранитьих в хэше на всякий случай, если частота будет увеличиваться позже в потоке
, и это создаст проблему с памятью, потому что со временем хеш может стать действительно большим

Интересно, будет ли единственным решением удалить определенноеслова
(но это изменит количество)

Я не уверен, как справиться с этим, любое предложение?

1 Ответ

3 голосов
/ 13 мая 2019

Вы можете использовать Три . И пока сохраняйте количество вхождений.

Следующее дерево соответствует следующему входу:

ABL ABO AC AC AC ACR ACR

enter image description here

Затем, заканчивая текущее слово, вы увеличиваете соответствующий счетчик и проверяете, больше ли он, чем наименьшее в списке k-наиболее частых, если да - замените.

Итак, вам нужно O(1) время для обработки каждого входящего символа.

...