Изменения
Нет описания правки
== Поиск шаблонов с масками ==
Пусть <tex>\varphi</tex> {{---}} маска, обозначающая любой одиночный символ.<BR>Например, шаблон <tex>ab\varphi\varphi c\varphi</tex> , который содержит в себе три маски, встречается на позициях <tex>2</tex> и <tex>8</tex> строки<tex>xabvccababcax</tex>. Надо для каждого заданного шаблона с масками находить все его вхождения в текст.<BR>Надо обнаружитьбезмасочные куски Для того, чтобы найти все вхождения в текст заданного шаблона с масками <tex>Q</tex>:, надо обнаружить вхождения в текст всех его безмасочных кусков.<BR>
Пусть <tex>\{</tex><tex>Q_1</tex>, ..., <tex>Q_k</tex><tex>\}</tex> {{---}} набор подстрок
<tex>Q</tex>, разделенных масками, и пусть <tex>l_1</tex>, ...,
<tex>l_k</tex> {{---}} их стартовые позиции в <tex>Q</tex>. Например, шаблон <tex>ab\varphi\varphi c\varphi</tex> содержит две подстроки без масок <tex>ab</tex> и <tex>c</tex> и их стартовые позиции соответственно <tex>1</tex> и <tex>5</tex>. <tex>C[i]</tex> {{---}} количество встретившихся в тексте безмасочных подстрок шаблона, который начинается в тексте на позиции <tex>i</tex>. <BR>
Алгоритм поиска:<BR>
1. <tex>\forall i = 1 \ldots m: C[i] = 0 </tex>, где <tex>m</tex> {{---}} длина текста. <BR>2. Используя алгоритм Ахо-Корасик, находим безмасочные подстроки шаблона <tex>Q</tex>: когда находим <tex>Q_i</tex>
в тексте <tex>T</tex> на позиции <tex>j</tex>, увеличиваем на единицу <tex>C[j - l_i + 1]</tex>.<BR>
== Время работы алгоритма поиска шаблонов с масками ==