<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F+%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F+%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0"/>
		<updated>2026-06-11T18:29:08Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B2_%D0%94%D0%9A%D0%90&amp;diff=76793</id>
		<title>Преобразование регулярного выражения в ДКА</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B2_%D0%94%D0%9A%D0%90&amp;diff=76793"/>
				<updated>2021-01-08T10:57:47Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
Преобразование проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно &amp;quot;спуститься&amp;quot; вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1, это базис.&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:базис.png|150px|thumb|center|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
|}&lt;br /&gt;
Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_i|S&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_iS&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:RegToAut.png|250px|thumb|center|рис. 2. Индукционный переход преобразования регулярного выражения в НКА]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
&lt;br /&gt;
* [[Регулярные языки: два определения и их эквивалентность]]&lt;br /&gt;
&lt;br /&gt;
* [[Детерминированные конечные автоматы]]&lt;br /&gt;
&lt;br /&gt;
* [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76791</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76791"/>
				<updated>2021-01-08T10:53:49Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
Преобразование проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно &amp;quot;спуститься&amp;quot; вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1, это базис.&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:базис.png|150px|thumb|center|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
|}&lt;br /&gt;
Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_i|S&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_iS&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:RegToAut.png|250px|thumb|center|рис. 2. Индукционный переход преобразования регулярного выражения в НКА]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76788</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76788"/>
				<updated>2021-01-08T10:45:11Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
Преобразование проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно &amp;quot;спуститься&amp;quot; вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1, это базис.&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:базис.png|150px|thumb|center|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
|}&lt;br /&gt;
Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_i|S&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_iS&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:RegToAut.png|250px|thumb|center|рис. 2. Индукционный переход преобразования регулярного выражения в НКА]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76786</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76786"/>
				<updated>2021-01-08T10:43:39Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* См. Также */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
Преобразование проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно &amp;quot;спуститься&amp;quot; вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1, это базис.&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:базис.png|150px|thumb|center|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
|}&lt;br /&gt;
Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_i|S&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_iS&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:RegToAut.png|250px|thumb|center|рис. 2. Индукционный переход преобразования регулярного выражения в НКА]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76714</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76714"/>
				<updated>2021-01-07T21:47:33Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
Преобразование проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно &amp;quot;спуститься&amp;quot; вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1, это базис.&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:базис.png|150px|thumb|center|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
|}&lt;br /&gt;
Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_i|S&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_iS&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:RegToAut.png|250px|thumb|center|рис. 2. Индукционный переход преобразования регулярного выражения в НКА]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76712</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76712"/>
				<updated>2021-01-07T21:43:44Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
Преобразование проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно &amp;quot;спуститься&amp;quot; вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1, это базис.&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:базис.png|150px|thumb|center|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
|}&lt;br /&gt;
Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_i|S&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_iS&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:RegToAut.png|250px|thumb|center|рис. 2. Индуктивный переход преобразования регулярного выражения в НКА]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76710</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76710"/>
				<updated>2021-01-07T21:42:48Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
Преобразование проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно &amp;quot;спуститься&amp;quot; вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1, это базис.&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:базис.png|150px|thumb|left|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
|}&lt;br /&gt;
Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_i|S&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_iS&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:RegToAut.png|250px|thumb|right|рис. 2. Индуктивный переход преобразования регулярного выражения в НКА]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76709</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76709"/>
				<updated>2021-01-07T21:42:09Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
Преобразование проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно &amp;quot;спуститься&amp;quot; вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1, это базис.&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:базис.png|200px|thumb|left|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
|}&lt;br /&gt;
Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_i|S&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_iS&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:RegToAut.png|200px|thumb|right|рис. 2. Индуктивный переход преобразования регулярного выражения в НКА]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76707</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76707"/>
				<updated>2021-01-07T21:40:59Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
Преобразование проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно &amp;quot;спуститься&amp;quot; вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1, это базис. Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_i|S&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_iS&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:базис.png|200px|thumb|left|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]] [[Файл:RegToAut.png|200px|thumb|right|рис. 2. Индуктивный переход преобразования регулярного выражения в НКА]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76706</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76706"/>
				<updated>2021-01-07T21:40:32Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
Преобразование проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно &amp;quot;спуститься&amp;quot; вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1, это базис. Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_i|S&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_iS&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
|[[Файл:базис.png|100px|thumb|left|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]] [[Файл:RegToAut.png|200px|thumb|right|рис. 2. Индуктивный переход преобразования регулярного выражения в НКА]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76705</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76705"/>
				<updated>2021-01-07T21:38:56Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
Преобразование проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно &amp;quot;спуститься&amp;quot; вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1, это базис. Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_i|S&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_iS&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
[[Файл:базис.png|100px|thumb|left|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]] [[Файл:RegToAut.png|200px|thumb|right|рис. 2. Индуктивный переход преобразования регулярного выражения в НКА]]&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76703</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76703"/>
				<updated>2021-01-07T21:35:40Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:базис.png|100px|thumb|left|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
[[Файл:RegToAut.png|200px|thumb|right|рис. 2. Индуктивный переход преобразования регулярного выражения в НКА]] &lt;br /&gt;
&lt;br /&gt;
Преобразование проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно &amp;quot;спуститься&amp;quot; вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1, это базис. Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_i|S&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_iS&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76683</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76683"/>
				<updated>2021-01-07T20:00:01Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:базис.png|100px|thumb|right|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
[[Файл:RegToAut.png|200px|thumb|right|рис. 2. Индуктивный шаг преобразования регулярного выражения в НКА]] &lt;br /&gt;
&lt;br /&gt;
Преобразование проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно &amp;quot;спуститься&amp;quot; вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1, это базис. Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_i|S&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_iS&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76670</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76670"/>
				<updated>2021-01-07T19:52:59Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:базис.png|100px|thumb|right|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
[[Файл:RegToAut.png|200px|thumb|right|рис. 2. Индуктивный шаг преобразования регулярного выражения в НКА]] &lt;br /&gt;
&lt;br /&gt;
Преобразование проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно спуститься вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1, это базис. Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_i|S&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_iS&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76669</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76669"/>
				<updated>2021-01-07T19:52:02Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:базис.png|100px|thumb|right|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
[[Файл:RegToAut.png|200px|thumb|right|рис. 2. Индуктивный шаг преобразования регулярного выражения в НКА]] &lt;br /&gt;
&lt;br /&gt;
Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно спуститься вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1, это базис. Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_i|S&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Предполагаем, что &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; уже построено, а &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, значит, возможно построить &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} = R_iS&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76663</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76663"/>
				<updated>2021-01-07T19:38:31Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:базис.png|100px|thumb|right|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
[[Файл:RegToAut.png|200px|thumb|right|рис. 2. Индуктивный шаг преобразования регулярного выражения в НКА]] &lt;br /&gt;
&lt;br /&gt;
Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно спуститься вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня - &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1. Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. S строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. S строится по тому же алгоритму, что и &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76661</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76661"/>
				<updated>2021-01-07T19:28:54Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:базис.png|100px|thumb|right|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
[[Файл:RegToAut.png|200px|thumb|right|рис. 2. Индуктивный шаг преобразования регулярного выражения в НКА]] &lt;br /&gt;
&lt;br /&gt;
Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно спуститься вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1. Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i}} \ne R&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Если &amp;lt;tex&amp;gt;L(S)&amp;lt;/tex&amp;gt; - язык  ненулевого уровня, то необходимо повторить те же шаги, что и при преобразовании &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Если &amp;lt;tex&amp;gt;L(S)&amp;lt;/tex&amp;gt; - язык  ненулевого уровня, то необходимо повторить те же шаги, что и при преобразовании &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76660</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76660"/>
				<updated>2021-01-07T19:27:18Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:базис.png|100px|thumb|right|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
[[Файл:RegToAut.png|200px|thumb|right|рис. 2. Индуктивный шаг преобразования регулярного выражения в НКА]] &lt;br /&gt;
&lt;br /&gt;
Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно спуститься вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1. Далее строится выражение &amp;lt;tex&amp;gt;\mathrm{R_{i+1}}&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;\mathrm{R_{i+1}} \ne R&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Если &amp;lt;tex&amp;gt;L(S)&amp;lt;/tex&amp;gt; - язык  ненулевого уровня, то необходимо повторить те же шаги, что и при преобразовании &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Если &amp;lt;tex&amp;gt;L(S)&amp;lt;/tex&amp;gt; - язык  ненулевого уровня, то необходимо повторить те же шаги, что и при преобразовании &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76659</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76659"/>
				<updated>2021-01-07T19:25:36Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:базис.png|100px|thumb|right|рис. 1. a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
[[Файл:RegToAut.png|200px|thumb|right|рис. 2. Индуктивный шаг преобразования регулярного выражения в НКА]] &lt;br /&gt;
&lt;br /&gt;
Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно спуститься вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1. Далее строится выражение &amp;lt;tex&amp;gt;R_(i+1)&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;R_(i+1) \ne R&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Если &amp;lt;tex&amp;gt;L(S)&amp;lt;/tex&amp;gt; - язык  ненулевого уровня, то необходимо повторить те же шаги, что и при преобразовании &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Если &amp;lt;tex&amp;gt;L(S)&amp;lt;/tex&amp;gt; - язык  ненулевого уровня, то необходимо повторить те же шаги, что и при преобразовании &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76658</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76658"/>
				<updated>2021-01-07T19:24:29Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование ДКА в регулярное выражение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:базис.png|80px|thumb|right|рис. 1. Автоматы, распознающие регулярные языки нулевого уровня a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
[[Файл:RegToAut.png|200px|thumb|right|рис. 2. Индуктивный шаг преобразования регулярного выражения в НКА]] &lt;br /&gt;
&lt;br /&gt;
Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно спуститься вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1. Далее строится выражение &amp;lt;tex&amp;gt;R_(i+1)&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;R_(i+1) \ne R&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Если &amp;lt;tex&amp;gt;L(S)&amp;lt;/tex&amp;gt; - язык  ненулевого уровня, то необходимо повторить те же шаги, что и при преобразовании &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Если &amp;lt;tex&amp;gt;L(S)&amp;lt;/tex&amp;gt; - язык  ненулевого уровня, то необходимо повторить те же шаги, что и при преобразовании &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76657</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76657"/>
				<updated>2021-01-07T19:23:41Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:базис.png|80px|thumb|right|рис. 1. Автоматы, распознающие регулярные языки нулевого уровня a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
[[Файл:RegToAut.png|200px|thumb|right|рис. 2. Индуктивный шаг преобразования регулярного выражения в НКА]] &lt;br /&gt;
&lt;br /&gt;
Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно спуститься вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1. Далее строится выражение &amp;lt;tex&amp;gt;R_(i+1)&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;R_(i+1) \ne R&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Если &amp;lt;tex&amp;gt;L(S)&amp;lt;/tex&amp;gt; - язык  ненулевого уровня, то необходимо повторить те же шаги, что и при преобразовании &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Если &amp;lt;tex&amp;gt;L(S)&amp;lt;/tex&amp;gt; - язык  ненулевого уровня, то необходимо повторить те же шаги, что и при преобразовании &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%91%D0%B0%D0%B7%D0%B8%D1%81.png&amp;diff=76656</id>
		<title>Файл:Базис.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%91%D0%B0%D0%B7%D0%B8%D1%81.png&amp;diff=76656"/>
				<updated>2021-01-07T19:19:00Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76655</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76655"/>
				<updated>2021-01-07T19:18:32Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:базис.png|150px|thumb|right|рис. 1. Автоматы, распознающие регулярные языки нулевого уровня a. &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; б. &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt; в. &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
[[Файл:RegToAut.png|200px|thumb|right|рис. 2. Индуктивный шаг преобразования регулярного выражения в НКА]] &lt;br /&gt;
&lt;br /&gt;
Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно спуститься вглубь языка &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;, дойдя до нулевого уровня &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt;. Автоматы, распознающие &amp;lt;tex&amp;gt;L(R_0)&amp;lt;/tex&amp;gt; представлены на рис. 1. Далее строится выражение &amp;lt;tex&amp;gt;R_i+1&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;R_i+1 /ne R&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 2.a. Если L(S) - язык  ненулевого уровня, то необходимо повторить те же шаги, что и при построении &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 2.б. Если L(S) - язык  ненулевого уровня, то необходимо повторить те же шаги, что и при построении &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 2.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76651</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76651"/>
				<updated>2021-01-07T18:51:19Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. Индуктивный шаг преобразования регулярного выражения в НКА]] &lt;br /&gt;
&lt;br /&gt;
Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Необходимо рекурсивно спуститься вглубь выражения, доходя до нулевого уровня. Когда &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; содержит один символ, несложно построить автомат, распознающий &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;. Далее строится выражение &amp;lt;tex&amp;gt;R_i+1&amp;lt;/tex&amp;gt;, пока &amp;lt;tex&amp;gt;R_i+1 /ne R&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76644</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76644"/>
				<updated>2021-01-07T18:44:49Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в НКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. Индуктивный шаг преобразования регулярного выражения в НКА]] &lt;br /&gt;
&lt;br /&gt;
Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]]. Рекурсивно идем вглубь выражения, пока не дойдем до нулевого уровня. Когда &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; содержит один символ, несложно построить автомат, распознающий &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;. Далее необходимо построить выражение &amp;lt;tex&amp;gt;R_i+1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_iS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R_i^*&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76613</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76613"/>
				<updated>2021-01-07T17:33:52Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в ДКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в [[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. Индуктивный шаг преобразования регулярного выражения в НКА]] &lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражение в НКА, предполагается, что &amp;lt;tex&amp;gt;L = L(R)&amp;lt;/tex&amp;gt; для [[Регулярные языки: два определения и их эквивалентность| регулярного выражения]] &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, следуя рекурсивному определению [[Регулярные языки: два определения и их эквивалентность| регулярных выражений]] - &amp;lt;tex&amp;gt; \mathrm{R_{i+1}} = \mathrm{R_i} \cup \left\{L_1 \cup L_2, L_1L_2, L_1^* | L_1, L_2 \in \mathrm{R_i}\right\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Базис: &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; содержит один символ. В этом случае &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; имеет вид: &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, ∅ или &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a ∈ Σ&amp;lt;/tex&amp;gt;. Несложно построить автомат, распознающий &amp;lt;tex&amp;gt;L(R)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Индукция: Пусть каждое регулярное выражение длины меньше &amp;lt;tex&amp;gt;k &amp;gt; 1&amp;lt;/tex&amp;gt; соответствует некоторому регулярному языку. Рассматривается выражение &amp;lt;tex&amp;gt;R_k&amp;lt;/tex&amp;gt; длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;.  Три части индукции представлены на рис. 1:&lt;br /&gt;
&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;, для некоторых выражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;(R)&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Автомат для &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; может быть автоматом и для &amp;lt;tex&amp;gt;(R)&amp;lt;/tex&amp;gt;, поскольку скобки не влияют на язык, задаваемый выражением.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76534</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76534"/>
				<updated>2021-01-07T13:44:59Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в ДКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в[[Недетерминированные конечные автоматы|НКА]] с &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
В построении регулярных выражений используются константы(&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; и ∅) и переменные для обозначения языков, и операторы для обозначения объединения(&amp;lt;tex&amp;gt;|&amp;lt;/tex&amp;gt;), конкатенации и [[Основные определения, связанные со строками#Формальные языки | замыкания Клини]](&amp;lt;tex&amp;gt;^*&amp;lt;/tex&amp;gt;). Регулярные выражения можно определить рекурсивно. Для каждого регулярного выражения &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; описывается представленный им язык, который обозначается через &amp;lt;tex&amp;gt;L(E)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА, предполагается, что &amp;lt;tex&amp;gt;L = L(R)&amp;lt;/tex&amp;gt; для регулярного выражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Три части индукции представлены на рис. 1. Произведем разбиение данного регулярного выражения на подвыражения. Возможны четыре случая. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;(R)&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Автомат для &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; может быть автоматом и для &amp;lt;tex&amp;gt;(R)&amp;lt;/tex&amp;gt;, поскольку скобки не влияют на язык, задаваемый выражением.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76406</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76406"/>
				<updated>2021-01-05T20:36:46Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в ДКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-[[Недетерминированные конечные автоматы|НКА]].&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построить]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
В построении регулярных выражений используются константы(&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; и ∅) и переменные для обозначения языков, и операторы для обозначения объединения(&amp;lt;tex&amp;gt;|&amp;lt;/tex&amp;gt;), конкатенации и [[Основные определения, связанные со строками#Формальные языки | замыкания Клини]](&amp;lt;tex&amp;gt;^*&amp;lt;/tex&amp;gt;). Регулярные выражения можно определить рекурсивно. Для каждого регулярного выражения &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; описывается представленный им язык, который обозначается через &amp;lt;tex&amp;gt;L(E)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА, предполагается, что &amp;lt;tex&amp;gt;L = L(R)&amp;lt;/tex&amp;gt; для регулярного выражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Три части индукции представлены на рис. 1. Произведем разбиение данного регулярного выражения на подвыражения. Возможны четыре случая. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;(R)&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Автомат для &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; может быть автоматом и для &amp;lt;tex&amp;gt;(R)&amp;lt;/tex&amp;gt;, поскольку скобки не влияют на язык, задаваемый выражением.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76405</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76405"/>
				<updated>2021-01-05T20:35:56Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в \varepsilon-НКА. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-[[Недетерминированные конечные автоматы|НКА]].&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
В построении регулярных выражений используются константы(&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; и ∅) и переменные для обозначения языков, и операторы для обозначения объединения(&amp;lt;tex&amp;gt;|&amp;lt;/tex&amp;gt;), конкатенации и [[Основные определения, связанные со строками#Формальные языки | замыкания Клини]](&amp;lt;tex&amp;gt;^*&amp;lt;/tex&amp;gt;). Регулярные выражения можно определить рекурсивно. Для каждого регулярного выражения &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; описывается представленный им язык, который обозначается через &amp;lt;tex&amp;gt;L(E)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА, предполагается, что &amp;lt;tex&amp;gt;L = L(R)&amp;lt;/tex&amp;gt; для регулярного выражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Три части индукции представлены на рис. 1. Произведем разбиение данного регулярного выражения на подвыражения. Возможны четыре случая. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;(R)&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Автомат для &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; может быть автоматом и для &amp;lt;tex&amp;gt;(R)&amp;lt;/tex&amp;gt;, поскольку скобки не влияют на язык, задаваемый выражением.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76403</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76403"/>
				<updated>2021-01-05T20:29:11Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в \varepsilon-НКА. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-[[Недетерминированные конечные автоматы|НКА]].&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
В построении регулярных выражений используются константы(&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; и ∅) и переменные для обозначения языков, и операторы для обозначения объединения(&amp;lt;tex&amp;gt;|&amp;lt;/tex&amp;gt;), конкатенации и [[Основные определения, связанные со строками#Формальные языки | замыкания Клини]](&amp;lt;tex&amp;gt;^*&amp;lt;/tex&amp;gt;). Регулярные выражения можно определить рекурсивно. Для каждого регулярного выражения &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; описывается представленный им язык, который обозначается через &amp;lt;tex&amp;gt;L(E)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА, предполагается, что &amp;lt;tex&amp;gt;L = L(R)&amp;lt;/tex&amp;gt; для регулярного выражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Три части индукции представлены на рис. 1. Произведем разбиение данного регулярного выражения на подвыражения. Возможны четыре случая. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;(R)&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Автомат для &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; может быть автоматом и для &amp;lt;tex&amp;gt;(R)&amp;lt;/tex&amp;gt;, поскольку скобки не влияют на язык, задаваемый выражением.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76401</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76401"/>
				<updated>2021-01-05T20:03:06Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в \varepsilon-НКА. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-[[Недетерминированные конечные автоматы|НКА]].&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
В построении регулярных выражений используются константы(&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; и ∅) и переменные для обозначения языков, и операторы для обозначения объединения(&amp;lt;tex&amp;gt;|&amp;lt;/tex&amp;gt;), конкатенации и замыкания Клини(&amp;lt;tex&amp;gt;^*&amp;lt;/tex&amp;gt;). Регулярные выражения можно определить рекурсивно. Для каждого регулярного выражения &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; описывается представленный им язык, который обозначается через &amp;lt;tex&amp;gt;L(E)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА, предполагается, что &amp;lt;tex&amp;gt;L = L(R)&amp;lt;/tex&amp;gt; для регулярного выражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Три части индукции представлены на рис. 1. Произведем разбиение данного регулярного выражения на подвыражения. Возможны четыре случая. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;(R)&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Автомат для &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; может быть автоматом и для &amp;lt;tex&amp;gt;(R)&amp;lt;/tex&amp;gt;, поскольку скобки не влияют на язык, задаваемый выражением.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76400</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76400"/>
				<updated>2021-01-05T20:01:56Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в \varepsilon-НКА. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-[[Недетерминированные конечные автоматы|НКА]].&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
В построении регулярных выражений используются константы(&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; и ∅) и переменные для обозначения языков, и операторы для обозначения объединения(|), конкатенации и замыкания Клини(*). Регулярные выражения можно определить рекурсивно. Для каждого регулярного выражения &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; описывается представленный им язык, который обозначается через &amp;lt;tex&amp;gt;L(E)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА, предполагается, что &amp;lt;tex&amp;gt;L = L(R)&amp;lt;/tex&amp;gt; для регулярного выражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Построение проводится структурной индукцией по выражению &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Три части индукции представлены на рис. 1. Произведем разбиение данного регулярного выражения на подвыражения. Возможны четыре случая. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;(R)&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Автомат для &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; может быть автоматом и для &amp;lt;tex&amp;gt;(R)&amp;lt;/tex&amp;gt;, поскольку скобки не влияют на язык, задаваемый выражением.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76389</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76389"/>
				<updated>2021-01-05T17:46:43Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование ДКА в регулярное выражение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-[[Недетерминированные конечные автоматы|НКА]].&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Преобразование ДКА в регулярное выражение==&lt;br /&gt;
&lt;br /&gt;
===Алгебраический метод Бжозовского===&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76388</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76388"/>
				<updated>2021-01-05T17:46:07Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в ДКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Преобразование регулярного выражения в ДКА==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-[[Недетерминированные конечные автоматы|НКА]].&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76386</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76386"/>
				<updated>2021-01-05T17:43:06Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в \varepsilon-НКА. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-[[Недетерминированные конечные автоматы|НКА]].&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76385</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76385"/>
				<updated>2021-01-05T17:41:03Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-[[Недетерминированные конечные автоматы|НКА]].&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76384</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76384"/>
				<updated>2021-01-05T17:40:35Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражение в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-[[Недетерминированные конечные автоматы|НКА]].&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76383</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76383"/>
				<updated>2021-01-05T17:39:51Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в \varepsilon-НКА. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражение в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-[[Недетерминированные конечные автоматы|НКА]].&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется [[Регулярные языки: два определения и их эквивалентность| регулярное выражение]] в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76382</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76382"/>
				<updated>2021-01-05T17:36:03Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражение в [[Детерминированные конечные автоматы|ДКА]], нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-[[Недетерминированные конечные автоматы|НКА]].&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76379</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76379"/>
				<updated>2021-01-05T17:33:55Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражение в ДКА, нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76378</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76378"/>
				<updated>2021-01-05T17:33:29Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* См. Также */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражение в ДКА, нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. Также==&lt;br /&gt;
&lt;br /&gt;
=Источники информации=&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76377</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76377"/>
				<updated>2021-01-05T17:32:21Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Алгебраический метод Бжозовского */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражение в ДКА, нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; добавляется &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=См. Также=&lt;br /&gt;
&lt;br /&gt;
=Источники информации=&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76376</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76376"/>
				<updated>2021-01-05T17:30:33Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование ДКА в регулярное выражение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражение в ДКА, нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
&lt;br /&gt;
При преобразовании ДКА в регулярное выражение создается система регулярных выражений для каждого состояния в ДКА, а затем она решается для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Построение уравнения происходит следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначается за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то добавляется в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\ne \varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого можно воспользоваться теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=См. Также=&lt;br /&gt;
&lt;br /&gt;
=Источники информации=&lt;br /&gt;
&lt;br /&gt;
* ''John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman'' «Introduction to Automata Theory, Languages, and Computation», 2/E&lt;br /&gt;
* ''Christoph Neumann'' «Converting Deterministic Finite Automata to Regular Expressions»&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76373</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76373"/>
				<updated>2021-01-05T17:15:41Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Пример */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражение в ДКА, нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]].&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
Создадим систему регулярных выражений для каждого состояния в ДКА, а затем решим систему для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Строим уравнения следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначим за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то добавим в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\ne \varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого воспользуемся теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76372</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76372"/>
				<updated>2021-01-05T17:14:39Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражение в ДКА, нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентный ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]] и [[Минимизация ДКА, алгоритм Хопкрофта (сложность O(n log n)) | минимизируем ДКА]]&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
Создадим систему регулярных выражений для каждого состояния в ДКА, а затем решим систему для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Строим уравнения следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначим за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то добавим в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\ne \varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого воспользуемся теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76371</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76371"/>
				<updated>2021-01-05T17:13:50Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражение в ДКА, нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание | &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентное ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]] и [[Минимизация ДКА, алгоритм Хопкрофта (сложность O(n log n)) | минимизируем ДКА]]&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
Создадим систему регулярных выражений для каждого состояния в ДКА, а затем решим систему для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Строим уравнения следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначим за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то добавим в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\ne \varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого воспользуемся теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76370</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76370"/>
				<updated>2021-01-05T17:13:23Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражение в ДКА, нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.&lt;br /&gt;
# Устранить [[Автоматы с eps-переходами. Eps-замыкание |&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентное ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]] и [[Минимизация ДКА, алгоритм Хопкрофта (сложность O(n log n)) | минимизируем ДКА]]&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
Создадим систему регулярных выражений для каждого состояния в ДКА, а затем решим систему для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Строим уравнения следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначим за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то добавим в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\ne \varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого воспользуемся теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76369</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=76369"/>
				<updated>2021-01-05T17:12:31Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Преобразование регулярного выражения в ДКА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
Чтобы преобразовать регулярное выражение в ДКА, нужно:&lt;br /&gt;
&lt;br /&gt;
# Преобразовать регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.&lt;br /&gt;
# [[Автоматы с eps-переходами. Eps-замыкание | Устранить &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим]] по НКА эквивалентное ДКА.&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|280px|thumb|right|рис. 1. &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.б. &lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;. Используем автомат, представленный на рис. 1.в.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]] и [[Минимизация ДКА, алгоритм Хопкрофта (сложность O(n log n)) | минимизируем ДКА]]&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|280px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
Создадим систему регулярных выражений для каждого состояния в ДКА, а затем решим систему для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Строим уравнения следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначим за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то добавим в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\ne \varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого воспользуемся теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=75963</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=75963"/>
				<updated>2021-01-01T20:07:07Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Пример */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|300px|thumb|right|рис. 1 &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
# Преобразуем регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.&lt;br /&gt;
# [[Автоматы с eps-переходами. Eps-замыкание | Устраним &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим по НКА эквивалентное ДКА по алгоритму Томпсона.]]&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.b.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения R. Используем автомат, представленный на рис. 1.c.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|250px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|250px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|250px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|250px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]] и [[Минимизация ДКА, алгоритм Хопкрофта (сложность O(n log n)) | минимизируем ДКА]]&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|250px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
Создадим систему регулярных выражений для каждого состояния в ДКА, а затем решим систему для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Строим уравнения следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначим за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то добавим в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\ne \varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого воспользуемся теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Задача: Построить регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=75962</id>
		<title>Участница:Наталья Юльцова</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D1%8F_%D0%AE%D0%BB%D1%8C%D1%86%D0%BE%D0%B2%D0%B0&amp;diff=75962"/>
				<updated>2021-01-01T20:06:28Z</updated>
		
		<summary type="html">&lt;p&gt;Наталья Юльцова: /* Пример */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Преобразование регулярного выражения в ДКА= &lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
[[Файл:RegToAut.png|300px|thumb|right|рис. 1 &amp;quot;Виды выражений&amp;quot;]] &lt;br /&gt;
&lt;br /&gt;
# Преобразуем регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.&lt;br /&gt;
# [[Автоматы с eps-переходами. Eps-замыкание | Устраним &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы.]]&lt;br /&gt;
# [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | Построим по НКА эквивалентное ДКА по алгоритму Томпсона.]]&lt;br /&gt;
&lt;br /&gt;
===Преобразование регулярного выражения в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА.===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее как преобразуется регулярное выражение в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Автомат для выражения строится композицией из автоматов, соответствующих&lt;br /&gt;
подвыражениям. &lt;br /&gt;
&lt;br /&gt;
Виды выражений:&lt;br /&gt;
&lt;br /&gt;
# Данное выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt; для некоторых подвыражений &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда ему соответствует автомат, представленный на рис. 1.a.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;. Автомат для этой конкатенации представлен на рис. 1.b.&lt;br /&gt;
# Выражение имеет вид &amp;lt;tex&amp;gt;R^*&amp;lt;/tex&amp;gt; для некоторого подвыражения R. Используем автомат, представленный на рис. 1.c.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
Задача: Преобразовать регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в ДКА.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
!Регулярное выражение!!Автомат&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем регулярное выражение &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА. Построим сначала автомат для &amp;lt;tex&amp;gt;0|1&amp;lt;/tex&amp;gt;. Это выражение имеет вид &amp;lt;tex&amp;gt;R|S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:0+1.png|250px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Далее считаем, что &amp;lt;tex&amp;gt;(0|1)&amp;lt;/tex&amp;gt; это подвыражение вида &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, и строим выражение &amp;lt;tex&amp;gt;(0|1)^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star.png|250px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Выражение &amp;lt;tex&amp;gt;(0|1)^*1&amp;lt;/tex&amp;gt; имеет вид &amp;lt;tex&amp;gt;RS&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(0|1)^*1(0|1)&amp;lt;/tex&amp;gt; имеет тот же вид.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:(0+1)star1(0+1).png|250px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Удалим &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходы, согласно алгоритму из[[Автоматы с eps-переходами. Eps-замыкание | статьи]], получим НКА.&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:removeEps.png|250px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|Преобразуем НКА в ДКА по [[Построение по НКА эквивалентного ДКА, алгоритм Томпсона | алгоритму Томпсона]] и [[Минимизация ДКА, алгоритм Хопкрофта (сложность O(n log n)) | минимизируем ДКА]]&lt;br /&gt;
| style=&amp;quot;background-color:white;&amp;quot; | [[Файл:minDKA.png|250px|thumb]]&lt;br /&gt;
|-align=&amp;quot;center&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Преобразование ДКА в регулярное выражение=&lt;br /&gt;
==Алгебраический метод Бжозовского==&lt;br /&gt;
Создадим систему регулярных выражений для каждого состояния в ДКА, а затем решим систему для регулярных выражений &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, связанных с терминальным состояниями &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt;. Строим уравнения следующим образом: для каждого состояния &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; уравнение &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; является объединением переходов, ведущих в это состояние. Переход a из &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;q_j&amp;lt;/tex&amp;gt; обозначим за &amp;lt;tex&amp;gt;aR_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;q_i&amp;lt;/tex&amp;gt; - терминальное состояние, то добавим в &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\ne \varepsilon&amp;lt;/tex&amp;gt;. Это приводит к системе уравнений вида:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ...  \\&lt;br /&gt;
R_2 = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon  \\&lt;br /&gt;
... \\&lt;br /&gt;
R_m = a_1*R_1 + a_2*R_2 + a_3*R_3 + ... + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_x&amp;lt;/tex&amp;gt; = ∅ если нет перехода от &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;R_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого воспользуемся теоремой Ардена:&lt;br /&gt;
&lt;br /&gt;
Уравнение вида &amp;lt;tex&amp;gt;R = Q + RP&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;P \ne \varepsilon&amp;lt;/tex&amp;gt;, имеет решение &amp;lt;tex&amp;gt;R = QP^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
&lt;br /&gt;
[[Файл:AutToReg.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
Найти: Регулярное выражение, удовлетворяющее данному ДКА.&lt;br /&gt;
&lt;br /&gt;
Решение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\begin{cases}&lt;br /&gt;
R_1 = b*R_2 + a*R_3 + \varepsilon  \\&lt;br /&gt;
R_2 = a*R_1  \\&lt;br /&gt;
R_3 = b*R_1 \\&lt;br /&gt;
R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon &lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим первое терминальное состояние:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Воспользуемся теоремой Ардена: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_1=(ab+ba)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим второе терминальное состояние :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединим выражения для терминальных состояний и получим искомое регулярное выражение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>Наталья Юльцова</name></author>	</entry>

	</feed>