<?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=83.149.21.203&amp;*</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=83.149.21.203&amp;*"/>
		<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/83.149.21.203"/>
		<updated>2026-06-14T04:19:00Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<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=76702</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=76702"/>
				<updated>2021-01-07T21:34:09Z</updated>
		
		<summary type="html">&lt;p&gt;83.149.21.203: /* Преобразование регулярного выражения в НКА */&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|рис. 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>83.149.21.203</name></author>	</entry>

	</feed>