При наличии словаря BFS является оптимальным, но необходимое время работы пропорционально его размеру (V + E). С n буквами в словаре может быть ~ a ^ n entires, где a - размер алфавита. Если словарь содержит все слова, кроме того, которое должно быть в конце цепочки, то вы пройдете все возможные слова, но ничего не найдете. Это обход графика, но его размер может быть экспоненциально большим.
Вы можете задаться вопросом, возможно ли сделать это быстрее - просмотреть структуру «разумно» и сделать это за полиномиальное время. Ответ, я думаю, нет.
Проблема:
Вам дан быстрый (линейный) способ проверить, есть ли слово в словаре, два слова u, v и проверить, есть ли последовательность u -> a 1 -> a 2 -> ... -> a n -> v.
NP-жесткий.
Доказательство: возьмите 3SAT, например
(p или q или не r) и (p или не q или r)
Вы начнете с 0 000 00 и должны проверить, можно ли перейти к 2 222 22.
Первый символ будет "мы закончили", три следующих бита будут управлять p, q, r и два следующих будут управлять предложениями.
Допустимые слова:
- Все, что начинается с 0 и содержит только 0 и 1
- Все, что начинается с 2 и является законным. Это означает, что он состоит из 0 и 1 (за исключением того, что первый символ равен 2, все биты предложений справедливо установлены в соответствии с битами переменных, и они установлены в 1 (поэтому это показывает, что формула выполнима).
- Все, что начинается с по крайней мере двух 2, а затем состоит из 0 и 1 (регулярное выражение: 222 * (0 + 1) *, как 22221101, но не 2212001
Чтобы получить 2 222 22 из 0 000 00, вы должны сделать это следующим образом:
(1) Отразить соответствующие биты - например, 0 100 111 в четыре этапа. Это требует поиска решения 3SAT.
(2) Измените первый бит на 2: 2 100 111. Здесь вы убедитесь, что это действительно решение 3SAT.
(3) Изменить 2 100 111 -> 2 200 111 -> 2 220 111 -> 2 222 111 -> 2 222 211 -> 2 222 221 -> 2 222 222.
Эти правила запрещают обманывать (проверять). Переход к 2 222 22 возможен только в том случае, если формула выполнима, и проверка этого является NP-трудной. Я чувствую, что это может быть еще сложнее (вероятно, #P или FNP), но NP-твердость достаточно для этой цели, я думаю.
Редактировать : Вас может заинтересовать несвязанная структура данных набора . Это займет ваш словарь и групповые слова, которые могут быть достигнуты друг от друга. Вы также можете сохранить путь от каждой вершины до корня или другой вершины. Это даст вам путь, не обязательно самый короткий.