Изменения

Перейти к: навигация, поиск

Решение уравнений в регулярных выражениях

1821 байт добавлено, 12:59, 10 января 2015
Добавлен пример решения системы
Далее подставляя в полученные в ходе итераций уравнения найденный <tex> X_i </tex>, обратной прогонкой найдем <tex>X_1 \dots X_{n-1} </tex>.
 
== Пример решения системы уравнений в регулярных выражениях ==
Пусть нам задан язык <tex>L_0</tex>, слова которого интерпретируются как последовательности чисел <tex>0, 1, 2</tex>, а языку удовлетворяют слова, сумма чисел в которых делится на 3. Тогда доопределив языки <tex>L_1, L_2</tex>, сумма чисел в словах из <tex>L_i</tex> равна <tex>i</tex> по модулю <tex>3</tex>, получим систему уравнений в регулярных выражениях:
 
<tex>
\begin{cases}
L_0 = 0L_0 + 1L_1 + 2L_2 + \varepsilon \\
L_1 = 2L_0 + 0L_1 + 1L_2 \\
L_2 = 1L_0 + 2L_1 + 0L_2
\end{cases}
</tex>
 
Поскольку нам нужно найти только <tex>L_0</tex>, чтобы избежать обратной прогонки, начнём выражать языки с <tex>L_2</tex>.
 
<tex>L_2 = 0L_2 + (1L_0 + 2L_1), \varepsilon \notin 0 \Rightarrow L_2 = 0^*(1L_0+2L_1)</tex>
 
<tex>L_1 = 2L_0 + 0L_1 + 1L_2 = 2L_0 + 0L_1 + 10^*(1L_0+2L_1) = </tex>
 
<tex> = (0 + 10^*2)L_1 + (2 + 10^*1)L_0, \varepsilon \notin (0 + 10^*2) \Rightarrow L_1 = (0 + 10^*2)^*(2 + 10^*1)L_0</tex>
 
<tex>L_0 = 0L_0 + 1L_1 + 2L_2 + \varepsilon = 0L_0 + 1L_1 + 20^*(1L_0 + 2L_1) + \varepsilon = </tex>
 
<tex> = (0 + 20^*1)L_0 + (1 + 20^*2)L_1 + \varepsilon = (0 + 20^*1)L_0 + (1 + 20^*2)(0 + 10^*2)^*(2 + 10^*1)L_0 + \varepsilon = </tex>
 
<tex> = (0 + 20^*1 + (1 + 20^*2)(0 + 10^*2)^*(2 + 10^*1))L_0 + \varepsilon </tex>
 
<tex>\varepsilon \notin (0 + 20^*1 + (1 + 20^*2)(0 + 10^*2)^*(2 + 10^*1)) \Rightarrow </tex>
 
<tex> \Rightarrow L_0 = (0 + 20^*1 + (1 + 20^*2)(0 + 10^*2)^*(2 + 10^*1))^* </tex>
== Примечания ==
120
правок

Навигация