Постройте регулярное выражение и соответствующий детерминированный конечный автомат (DFA) для языка всех строк над {a,b}, содержащих подстроку "abba"; опишите процедуру построения и докажите корректность.

12 Ноя в 10:27
4 +3
0
Ответы
1
Регулярное выражение:
(a∣b)∗abba(a∣b)∗ (a|b)^*\text{abba}(a|b)^*
(ab)abba(ab)
(то есть все строки над {a,b}\{a,b\}{a,b}, которые содержат подстроку abba\text{abba}abba).
ДКА (конструкт KMP-подобный). Пусть состояния {q0,q1,q2,q3,q4}\{q_0,q_1,q_2,q_3,q_4\}{q0 ,q1 ,q2 ,q3 ,q4 }, стартовое q0q_0q0 , единственное принимающее q4q_4q4 . Интерпретация состояния: в qiq_iqi длина наибольшего префикса слова abba\text{abba}abba, являющегося суффиксом уже прочитанного входа, равна iii. Переходы δ\deltaδ:
δ(q0,a)=q1,δ(q0,b)=q0;δ(q1,a)=q1,δ(q1,b)=q2;δ(q2,a)=q1,δ(q2,b)=q3;δ(q3,a)=q4,δ(q3,b)=q0;δ(q4,a)=q4,δ(q4,b)=q4. \begin{aligned}
&\delta(q_0,a)=q_1,\quad \delta(q_0,b)=q_0;\\
&\delta(q_1,a)=q_1,\quad \delta(q_1,b)=q_2;\\
&\delta(q_2,a)=q_1,\quad \delta(q_2,b)=q_3;\\
&\delta(q_3,a)=q_4,\quad \delta(q_3,b)=q_0;\\
&\delta(q_4,a)=q_4,\quad \delta(q_4,b)=q_4.
\end{aligned}
δ(q0 ,a)=q1 ,δ(q0 ,b)=q0 ;δ(q1 ,a)=q1 ,δ(q1 ,b)=q2 ;δ(q2 ,a)=q1 ,δ(q2 ,b)=q3 ;δ(q3 ,a)=q4 ,δ(q3 ,b)=q0 ;δ(q4 ,a)=q4 ,δ(q4 ,b)=q4 .

Короткое пояснение построения: состояния соответствуют длинам совпавшего префикса abba\text{abba}abba (0..4). При чтении символа обновляем длину совпавшего суффикса, делая "откат" по наиболее длинному возможному префиксу (как в KMP). Состояние q4q_4q4 — поглощающий, потому что после того как встретилась подстрока abba\text{abba}abba, любая дальнейшая часть строки всё ещё должна приниматься.
Доказательство корректности (инвариант + следствие):
Инвариант: после чтения любого префикса входного слова www автомат находится в состоянии qiq_iqi тогда и только тогда, когда iii — длина наибольшего префикса abba\text{abba}abba, являющегося суффиксом www.
Доказательство инварианта по индукции по длине префикса: для пустой строки верно (находятся в q0q_0q0 ). Пусть верно для строки www, докажем для wawawa или wbwbwb: по определению переходов мы переводим текущее значение длины совпадающего суффикса в новое — именно в наибольшую возможную длину префикса abba\text{abba}abba, являющегося суффиксом расширенного слова (это прямое свойство построения переходов, аналогичное функции переходов в KMP). Таким образом инвариант сохраняется.
Следствие: принимающее состояние q4q_4q4 достигнуто после чтения некоторого префикса входа тогда и только тогда, когда этот префикс содержит подстроку abba\text{abba}abba. Поскольку q4q_4q4 поглощающий, автомат принимает ровно те слова, в каких встречается подстрока abba\text{abba}abba. Значит язык ДКА равен языку, порождаемому регулярным выражением выше.
Таким образом регулярное выражение и приведённый ДКА описывают один и тот же язык — все строки над {a,b}\{a,b\}{a,b}, содержащие подстроку abba\text{abba}abba.
12 Ноя в 11:20
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир