Boggle с помощью Trie
Дан словарь, метод поиска в словаре и доска M x N, где каждая ячейка имеет один символ. Найдите все возможные слова, которые могут быть образованы последовательностью смежных символов. Обратите внимание, что мы можем перейти к любому из 8 соседних символов, но слово не должно иметь несколько экземпляров одной и той же ячейки.
Пример:
Input: dictionary[] = {"GEEKS", "FOR", "QUIZ", "GO"}; boggle[][] = {{"G", "I", "Z"}, {"U", "E", "K"}, {"Q", "S", "E"}}; Output: Following words of the dictionary are present GEEKS QUIZ Explanation:
Input: dictionary[] = {"GEEKS", "ABCFIHGDE"}; boggle[][] = {{"A", "B", "C"}, {"D", "E", "F"}, {"G", "H", "I"}}; Output: Following words of the dictionary are present ABCFIHGDE Explanation:
Мы обсудили решение на основе Graph DFS в посте ниже.
Boggle (Найти все возможные слова в таблице символов) | Набор 1
Здесь мы обсуждаем решение на основе Trie, которое лучше, чем решение на основе DFS.
Данный словарь-словарь[] = {"GEEKS", "FOR", "QUIZ", "GO"}
1. Создайте пустое дерево и вставьте в него все слова данного словаря.
After insertion, Trie looks like(leaf nodes are in RED) root / G F Q / | | | O E O U | | | E R I | | K Z | S
2. После этого мы выбираем только те символы в boggle[][], которые являются дочерними элементами корня Trie.
Пусть выше мы выбираем 'G' boggle[0][0], 'Q' boggle[2][0] (они оба присутствуют в матрице boggle)
3. искать слово в дереве, которое начинается с символа, который мы выбрали на шаге 2
1) Create bool visited boolean matrix (Visited[M][N] = false ) 2) Call SearchWord() for every cell (i, j) which has one of the first characters of dictionary words. In above example, we have "G" and "Q" as first characters. SearchWord(Trie *root, i, j, visited[][N]) if root->leaf == true print word if we have seen this element first time then make it visited. visited[i][j] = true do traverse all child of current root k goes (0 to 26 ) [there are only 26 Alphabet] add current char and search for next character find next character which is adjacent to boggle[i][j] they are 8 adjacent cells of boggle[i][j] (i+1, j+1), (i+1, j) (i-1, j) and so on. make it unvisited visited[i][j] = false
Ниже приведена реализация вышеуказанной идеи:
Выход:
GEE, GEEKS, QUIZ
Анализ сложности:
- Временная сложность: O(4^(N^2)).
Даже после применения попытки временная сложность остается прежней. Для каждой ячейки есть 4 направления и есть N^2 ячеек. Таким образом, временная сложность составляет O (4 ^ (N ^ 2)). - Вспомогательное пространство: O(N^2).
Максимальная длина рекурсии может быть N^2, где N — сторона матрицы. Таким образом, сложность пространства составляет O (N ^ 2).
Эта статья предоставлена Нишант Сингх. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью с помощью write.geeksforgeeks.org или отправить ее по адресу review-team@geeksforgeeks.org. Посмотрите, как ваша статья появится на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.