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, и помогите другим гикам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.