Это будет просто более запутанный поиск в графике (он же найдет путь через подземелье, где некоторые двери сломаны и должны быть открыты, и вы хотите позаботиться о них).
Детали во многом зависят от того, что вы подразумеваете под "ошибкой". Поэтому я понимаю, что «ошибка» - это замена одного символа, это самый простой случай.
В алгоритме вы будете искать дерево в корне, сравнивая и продвигая ваш шаблон, как если бы вы искали точное совпадение. Просто если на краю был символ, за которым вы не могли бы следовать, вы сохраняете состояние вашего алгоритма на потом (состояние [tree position, pattern position]
). Это должно применяться, даже если вы можете перейти по одной ссылке для узла, но не по другой - вы выполняете сопоставление и сохраняете другие.
Затем вы возвращаетесь к сохраненным позициям и эмулируете замену, что означает продвижение на одну позицию в дереве (до всех несопоставимых возможностей) и на одну позицию в шаблоне. Затем продолжите поиск в обычном режиме (вы использовали вероятность одной ошибки, поэтому вы ищете точное совпадение).
Всякий раз, когда вы достигаете конца шаблона, сообщайте об успешном совпадении (т. Е. Все листья ниже текущего узла в дереве).