деревья суффиксов: поиск подстроки, если допускается определенное количество ошибок - PullRequest
4 голосов
/ 16 февраля 2012

Согласно статье Википедии о деревьях суффиксов , деревья суффиксов могут использоваться для поиска подстрок строки, если допускается определенное количество ошибок.

Учитывая дерево суффиксовстрока, как я могу найти все экземпляры данной подстроки в ней, допуская для каждого экземпляра не более одной ошибки?

(Под «ошибкой» я подразумеваю замену одного символа.)

1 Ответ

4 голосов
/ 16 февраля 2012

Это будет просто более запутанный поиск в графике (он же найдет путь через подземелье, где некоторые двери сломаны и должны быть открыты, и вы хотите позаботиться о них).

Детали во многом зависят от того, что вы подразумеваете под "ошибкой". Поэтому я понимаю, что «ошибка» - это замена одного символа, это самый простой случай.

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

Затем вы возвращаетесь к сохраненным позициям и эмулируете замену, что означает продвижение на одну позицию в дереве (до всех несопоставимых возможностей) и на одну позицию в шаблоне. Затем продолжите поиск в обычном режиме (вы использовали вероятность одной ошибки, поэтому вы ищете точное совпадение).

Всякий раз, когда вы достигаете конца шаблона, сообщайте об успешном совпадении (т. Е. Все листья ниже текущего узла в дереве).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...