Материал из Викиконспекты
Уравнения в регулярных выражениях
Поскольку алгебра регулярных выражений является частным случаем алгебры Клини, то и соответствующие уравнения можно рассматривать как уравнения алгебры Клини. Сама эта алгебра классически используется в теории формальных языков, но также была применена к алгоритмам поиска пути в графах, нахождения выпуклой оболочки. В компиляторах она может быть использована для доказательства корректности методик оптимизации циклов.
Решение уравнений в регулярных выражениях
Пусть [math]X[/math] — некий язык, для которого выполняется равенство [math]X = \alpha X + \beta [/math], где [math]\alpha,\,\beta[/math] — некие регулярные выражения над неким алфавитом [math]A[/math].
Утверждение: |
Пусть уравнение имеет вид [math] X = \alpha X + \beta \Rightarrow \, 1)[/math]
если [math]\varepsilon \notin \alpha [/math], тогда [math] \alpha^{*} \beta[/math] — единственное решение [math]2)[/math] если [math]\varepsilon \in \alpha [/math], тогда [math] \alpha^{*}( \beta + L)[/math] — решение для [math]\forall L[/math] |
[math]\triangleright[/math] |
[math] 1) [/math] Пусть [math]\varepsilon \notin \alpha [/math]. Тогда [math]\forall i \geqslant 0: [/math] выражение [math]\alpha^{i} \beta \subset X [/math], следовательно [math] \alpha^{*} \beta \subset X [/math]. Докажем это индукцией по [math]i[/math]: при [math]i = 0[/math] из начального равенства [math]\beta \subset X[/math], и если [math]\alpha^{i} \beta \subset X[/math], то [math]\alpha^{i+1} \beta = \alpha \alpha^{i} \beta \subset \alpha X \subset X[/math].
Пусть существует [math] z \in X,\, z\notin \alpha^{*} \beta[/math] такой, что [math] z [/math] — самое короткое; тогда [math]z \notin \beta \subset \alpha^{*} \beta \Rightarrow z \in \alpha X, z=z_\alpha z', [/math] где [math]z_\alpha \in \alpha, z' \in X, z' \notin \alpha^{*} \beta [/math].
Тогда [math] z_\alpha \ne \varepsilon \Rightarrow z'[/math] короче [math]z[/math], противоречие, тогда не существует самого короткого [math]z[/math], значит не существует никакого.
[math] 2)[/math] Пусть [math] \varepsilon \in \alpha[/math]. Тогда можно представить этот язык в виде [math]\alpha = \varepsilon + \alpha_{1}, \varepsilon \notin \alpha_{1}[/math], а исходное равенство преобразуется в [math]\varepsilon X + \alpha_{1} X + \beta = X[/math]. Теперь мы можем взять в качестве базы индукции не просто [math]\beta[/math], а любой язык [math]L \supset \beta[/math], или, что то же самое, любой [math]\beta + L[/math], и дальше показать [math]\forall i \geqslant 0: {\alpha_{1}}^{i} (\beta + L) \subset X \Rightarrow {\alpha_{1}}^{*} (\beta + L) \subset X[/math], а потом отсутствие самого короткого [math]z \in X, z \notin {\alpha_{1}}^{*}(\beta + L)[/math]. Заметим, что [math]\alpha^{*}={\alpha_{1}}^{*}[/math], тогда [math]X = {\alpha_{1}}^{*}(\beta + L) = \alpha^{*}(\beta + L)[/math]. |
[math]\triangleleft[/math] |
Решение системы уравнений в регулярных выражениях
Пусть система уравнений имеет вид
[math]
\begin{cases}
\alpha_{11} X_1 + \alpha_{12} X_2 + \dots + \alpha_{1n} X_n + \beta_1 = X_1 \\
\alpha_{21} X_1 + \alpha_{22} X_2 + \dots + \alpha_{2n} X_n + \beta_2 = X_2\\
\dots\\
\alpha_{n1} X_1 + \alpha_{n2} X_2 + \dots + \alpha_{nn} X_n + \beta_n = X_n \\
\end{cases}
[/math]
Метод решения
Выразим [math]X_1[/math] из первого уравнения и подставим во второе уравнение: [math]X_2 = ( \alpha_{21} \alpha_{11}^{*} \alpha_{12} +\alpha_{22} ) X_2 + (\alpha_{21} \alpha_{11}^{*} \alpha_{13} + \alpha_{23}) X_3 + \dots + (\alpha_{21} \alpha_{11}^{*} \alpha_{1n} + \alpha_{2n}) X_n[/math] [math]+ \beta_2[/math].
Пусть [math] a =( \alpha_{21} \alpha_{11}^{*} \alpha_{12} +\alpha_{22} ) [/math], [math] b =(\alpha_{21} \alpha_{11}^{*} \alpha_{13} + \alpha_{23}) X_3 + \dots + (\alpha_{21} \alpha_{11}^{*} \alpha_{1n} + \alpha_{2n}) X_n + \beta_2 [/math], тогда уравнение примет вид [math]X_2=a X_2 + b[/math]. Его решением будет [math]a^{*} b[/math]. Подставим в следующее уравнение выраженный [math]X_2[/math].
Далее выполняя схожие итерации получим уравнение [math]X_n = a' X_n + b'[/math], где [math] a'=f( \alpha_{11} \dots \alpha_{1n} \alpha_{2n} \dots \alpha_{nn} ),\, b'=g( \alpha_{11} \dots \alpha_{1n} \alpha_{2n} \dots \alpha_{nn} ) [/math], тогда [math]X_n= f^{*}( \alpha_{11} \dots \alpha_{1n} \alpha_{2n} \dots \alpha_{nn} )g( \alpha_{11} \dots \alpha_{1n} \alpha_{2n} \dots \alpha_{nn} )[/math].
Далее подставляя в полученные в ходе итераций уравнения найденный [math] X_i [/math], обратной прогонкой найдем [math]X_1 \dots X_{n-1} [/math].
См. такжеСсылки