Дана книга слов. Предположим, у вас достаточно основной памяти, чтобы вместить все слова. спроектировать структуру данных, чтобы найти максимальное число K встречающихся слов. Структура данных должна быть динамичной, чтобы можно было добавлять новые слова.
Простым решением является использование хеширования . Хеш все слова одно за другим в хэш-таблице. Если слово уже присутствует, увеличьте его количество. Наконец, пройдите через хеш-таблицу и верните k слов с максимальным количеством.
Мы можем использовать Trie и Min Heap, чтобы эффективно получить k наиболее часто встречающихся слов. Идея состоит в том, чтобы использовать Trie для поиска существующих слов, эффективно добавляя новые слова. Три также хранит количество вхождений слов. Min Heap размера k используется для отслеживания k наиболее часто встречающихся слов в любой момент времени (использование Min Heap такое же, как мы использовали его, чтобы найти k самых больших элементов в этом посте).
Trie и Min Heap связаны друг с другом путем хранения дополнительного поля в Trie «indexMinHeap» и указателя «trNode» в Min Heap. Значение 'indexMinHeap' поддерживается равным -1 для слов, которые в данный момент отсутствуют в Min Heap (или в настоящее время не входят в число самых популярных k слов). Для слов, присутствующих в Min Heap, 'indexMinHeap' содержит индекс слова в Min Heap. Указатель 'trNode' в Min Heap указывает на листовой узел, соответствующий слову в Trie.
Ниже приводится полный процесс печати k наиболее часто встречающихся слов из файла.
Прочитайте все слова одно за другим. Для каждого слова вставьте его в Trie. Увеличьте счетчик слова, если он уже существует. Теперь нам нужно вставить это слово также в min heap. Для вставки в минимальную кучу возникает 3 случая:
1. Слово уже присутствует. Мы просто увеличиваем соответствующее значение частоты в min heap и вызываем minHeapify () для индекса, полученного с помощью поля «indexMinHeap» в Trie. Когда узлы минимальной кучи меняются местами, мы меняем соответствующий minHeapIndex в Trie. Помните, что каждый узел кучи min также имеет указатель на конечный узел Trie.
2. MinHeap не заполнен. мы вставим новое слово в min heap и обновим корневой узел в узле min heap и в индекс min heap в листовом узле Trie. Теперь вызовите buildMinHeap ().
3. Мин куча заполнена. Возникают два случая.
…. 3.1 Частота добавления нового слова меньше частоты слова, хранящегося в заголовке min heap. Ничего не делать.
…. 3.2 Частота добавления нового слова больше, чем частота слова, хранящегося в заголовке min heap. Заменить и обновить поля. Обязательно обновите соответствующий индекс минимальной кучи «заменяемого слова» в Trie на -1, так как слово больше не находится в минимальной куче.
4. Наконец, Min Heap будет иметь k наиболее часто встречающихся слов из всех слов, представленных в данном файле. Так что нам просто нужно напечатать все слова, присутствующие в Min Heap.
|
Выход:
your : 3 well : 3 and : 4 to : 4 Geeks : 6
Приведенный выше вывод для файла со следующим содержанием.
Welcome to the world of Geeks This portal has been created to provide well written well thought and well explained solutions for selected questions If you like Geeks for Geeks and would like to contribute here is your chance You can write article and mail your article to contribute at geeksforgeeks org See your article appearing on the Geeks for Geeks main page and help thousands of other Geeks
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Проверьте, может ли данная строка слов быть сформирована из слов, присутствующих в словаре
- Самый частый элемент в массиве
- Наименее частый элемент в массиве
- Количество слов, присутствующих во всех заданных предложениях
- Подсчет количества слов в Trie
- Учитывая последовательность слов, выведите все анаграммы вместе | Набор 2
- Словообразование с использованием конкатенации двух словарных слов
- Пара палиндромов в массиве слов (или строк)
- Напечатайте все допустимые слова, которые возможны с помощью символов массива
- Проверьте, содержит ли данный Trie слова, начинающиеся с каждого алфавита
- Распечатать все слова, соответствующие шаблону, в диктофоне CamelCase Notation
- Сортировать массив строк по частоте употребления в них слов.
- Сортировка массива строк (или слов) с помощью Trie | Set-2 (Обработка Дубликатов)
- Союз-Найти Алгоритм | (Объединение по рангу и поиск по оптимизированному сжатию пути)
- Найти все тройки с нулевой суммой
0.00 (0%) 0 votes