Скажем, вам дан огромный файл, скажем, 1 ГБ. Файл содержит слово в каждой строке (всего n слов), и вы хотите найти k наиболее частых терминов в файле.
Теперь, полагая, что у вас достаточно памяти для хранения этих слов, каков лучший способ подойти к вопросу с точки зрения сокращения использования памяти и постоянных накладных расходов в сложности Big-O? Я считаю, что можно использовать два основных алгоритма:
- Используйте хеш-таблицу и мини-кучу для хранения вхождений и верхних K-слов. Это O (n + nlogk) ~ O (N)
- Используйте trie для хранения слов и вхождений, а затем пересекайте trie для подсчета наиболее часто встречающихся слов. Это O (n * p) ~ O (N), где p - длина самого длинного слова.
Какой подход лучше?
Кроме того: если у вас недостаточно памяти для хэш-таблицы/trie (т.е. ограниченная память размером 10 МБ), то какой лучший подход?