Вы можете применять DFS или другие алгоритмы графа, потому что вы в основном играете на сетчатом графе с диагоналями. .
![введите здесь описание изображения](https://i.stack.imgur.com/PZ3Vy.jpg)
Поместите свои буквы вместо точек, и у вас есть график. Теперь, почему DFS будет работать здесь?
Когда вы создаете слово в этой игре — вы соединяете соседние вершины и тем самым создаете путь на графе. Итак, вот подход, с которого вы можете начать (и улучшить).
- Создайте набор всех слов английского алфавита и разумной длины слова (предположим, что слова не длиннее
N
символов)
- Начните итерацию с вершин и из каждой вершины вызовите DFS, который работает до длины
N
. Для каждого из слов (которых в правилах больше 3) проверьте, есть ли оно в словаре, и если да, то сохраните их где-нибудь.
Вы можете видеть, что в моей части графика вы можете легко найти слово TORUS
.
Почему имеет смысл использовать DFS, а не BFS? Вот несколько причин:
- легче реализовать
- намного меньшая космическая сложность
Какова сложность моего алгоритма Предположим, что у вас есть сетка n * m
и самое длинное слово имеет длину d
. Потому что в моем алгоритме вы реализуете поиск в глубину из всех вершин, а сложность поиска в глубину составляет O(b^d), где средняя ветвь немного меньше 8 (может быть даже меньше 7, потому что здесь не может быть циклов). Поиск в наборе id O(1). Итак, сложность m * n * 8^d
.
Как его улучшить? Нет смысла искать слово TLRSOU
, потому что в английском алфавите нет слов, начинающихся с TLR
. Поэтому лучше хранить слова в trie и быстро завершать ветки, которые не делают смысл.
person
Salvador Dali
schedule
18.12.2015