Опубликован: 09.07.2007 | Уровень: профессионал | Доступ: свободно | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 16:

Алгоритмически разрешимые проблемы

< Лекция 15 || Лекция 16: 123 || Лекция 17 >

15.9*. Проблема неравенства регулярных выражений без итерации

Теорема 15.9.1. Проблема неравенства регулярных выражений без итерации ( то есть регулярных выражений с нулевой звездной высотой ) NP- полна.

Доказательство. По регулярному выражению без итерации легко построить конечный автомат с однобуквенными переходами, не содержащий циклов. Проблема неравенства таких конечных автоматов принадлежит классу NP: достаточно "угадать" слово, принадлежащее разности языков, распознаваемых двумя данными автоматами, и, продвигаясь по этому слову буква за буквой, подобно доказательству теоремы 2.7.1 вычислять, в каких состояниях автоматы могут оказаться. При этом длину слова можно ограничить максимумом числа состояний двух автоматов.

Осталось доказать, что проблема неравенства регулярных выражений без итерации NP-сложна. Для этого достаточно продемонстрировать, что к этой проблеме полиномиально сводится проблема выполнимости булевых формул в конъюнктивной нормальной форме (то есть множество кодов выполнимых булевых формул в конъюнктивной нормальной форме полиномиально сводится к множеству кодов пар неравных регулярных выражений без итерации). Искомое полиномиальное сведЕние может быть построено следующим образом.

Пусть дана булева формула C_1 \land C_2 \land \ldots \land C_m , составленная из пропозициональных переменных x1, x2, ..., xn (при более формальном подходе можно считать xi обозначением слова p#i, как это сделано в примере 7.2.8). Здесь для каждого j \leq m формула Cj является элементарной дизъюнкцией. Для краткости будем обозначать отрицание переменной xi через \overline{x_i} (а не через \lnot x_i , как в примере 7.2.8).

Построим два регулярных выражения над алфавитом \Sigma = \{a,b\} . В качестве первого регулярного выражения возьмем

\underbrace{ (a+b) \cdot (a+b) \cdot \ldots \cdot (a+b) }_{n \text{ раз}} .
Для удобства отождествим истинностные значения "ложь" и "истина" с символами a и b соответственно. Тогда оценку пропозициональных переменных x1, x2, ..., xn можно естественным образом отождествить со словом длины n в алфавите \Sigma . Второе регулярное выражение e построим так, чтобы выполнялось равенство
\regval{e} = \{ w \in \Sigma^* \mid
 | w | = n
 \rusand
 C_1 \land C_2 \land \ldots \land C_m
 \mathspace\text{ложна при оценке}\mathspace w \} .
Если m = 1, то это сделать легко. Возьмем в качестве e произведение n сомножителей, каждый из которых совпадает с~одним из следующих четырех регулярных выражений: (a + b), a, b, 0. При этом i -й сомножитель соответствует пропозициональной переменной xi и выбирается следующим образом:

  • если данная элементарная дизъюнкция не содержит ни литерала xi, ни литерала \overline{x_i} , то используем выражение (a+b) ;
  • если она содержит литерал xi, но не содержит литерала \overline{x_i} , то используем выражение a ;
  • если она содержит литерал \overline{x_i} , но не содержит литерала xi, то используем выражение b ;
  • если она содержит оба литерала xi и \overline{x_i} , то используем выражение 0.

Если m > 1, то построим по указанному методу для каждой из булевых формул C1, C2, ..., Cm регулярное выражение и возьмем их сумму.

Легко видеть, что два построенных так регулярных выражения равны тогда и только тогда, когда булева формула C_1 \land C_2 \land \ldots \land C_m невыполнима.

Пример 15.9.2. Пусть \Sigma = \{ a , b \} . Регулярные выражения

(a+b)(a+b)(a+b)

и

ab(a+b)+(a+b)ab+b(a+b)(a+b)+(a+b)(a+b)a

равны, так как булева формула

(x_1 \lor \overline{x_2}) \land
(x_2 \lor \overline{x_3}) \land
\overline{x_1} \land x_3
невыполнима (или, другими словами, булева формула
(\overline{x_1} \land x_2) \lor
(\overline{x_2} \land x_3) \lor
x_1 \lor
\overline{x_3}
является тавтологией).

Упражнение 15.9.3. Равны ли регулярные выражения

(a+b)(a+b)(a+b)

и

bb(a+b)+ba(a+b)+a(a+b)b+(a+b)aa ?

Упражнение 15.9.4. Равны ли регулярные выражения

(a+b)(a+b)(a+b)(a+b)

и

aab(a+b)+a(a+b)(a+b)b+(a+b)aa(a+b)+(a+b)bb(a+b)+
                         +(a+b)baa+bab(a+b)+b(a+b)(a+b)b ?

Упражнение 15.9.5. Эквивалентен ли конечный автомат

\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix {
  *=[o][F-]{1}
 \ar @`{+/l16mm/} [] ^{}
 \ar  "1,2" <0.6mm> ^{a}
 \ar  "1,2" <-0.6mm> _{b}
& *=[o][F-]{2}
 \ar  "1,3" <0.6mm> ^{a}
 \ar  "1,3" <-0.6mm> _{b}
& *=[o][F-]{3}
 \ar  "1,4" <0.6mm> ^{a}
 \ar  "1,4" <-0.6mm> _{b}
& *=[o][F=]{4}
}
конечному автомату, изображенному ниже?
\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix {
  *=[o][F-]{0}
 \ar @`{+/l16mm/} [] ^{}
 \ar  "4,1" <0.6mm> ^{a}
 \ar  "4,1" <-0.6mm> _{b}
 \ar  "2,2"  ^{a}
 \ar  "1,4"  _{b}
& 
& 
& *=[o][F-]{4}
 \ar  "4,4" <0.6mm> ^{a}
 \ar  "4,4" <-0.6mm> _{b}
 \ar  "2,3"  _{b}
\\
  %
& *=[o][F-]{2}
 \ar  "3,2" <0.6mm> ^{a}
 \ar  "3,2" <-0.6mm> _{b}
 \ar  "2,3"  ^{a}
& *=[o][F-]{6}
 \ar  "3,3" <0.6mm> ^{a}
 \ar  "3,3" <-0.6mm> _{b}
& 
\\
  %
& *=[o][F-]{3}
 \ar  "3,3"  _{a}
& *=[o][F=]{7}
& 
\\
  *=[o][F-]{1}
 \ar  "3,2"  _{a}
 \ar  "4,4"  ^{b}
& 
& 
& *=[o][F-]{5}
 \ar  "3,3"  ^{b}
}

< Лекция 15 || Лекция 16: 123 || Лекция 17 >
Юлия Маковецкая
Юлия Маковецкая

Упражнение 2.1.25

Евгения Гунченко
Евгения Гунченко

Сдавала тест экстерном, результат получен 74 после принятия данного результата и соответственно оплаты курса, будет ли выдано удостоверение о повышении квалификации?

Олег Гуреев
Олег Гуреев
Россия
Илья Константинов
Илья Константинов
Россия, Краснодар