<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://nerc.itmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=95.25.13.249&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="https://nerc.itmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=95.25.13.249&amp;*"/>
		<link rel="alternate" type="text/html" href="https://nerc.itmo.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/95.25.13.249"/>
		<updated>2026-11-12T12:24:54Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://nerc.itmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D0%9D%D0%9A%D0%90_%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D0%94%D0%9A%D0%90,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%A2%D0%BE%D0%BC%D0%BF%D1%81%D0%BE%D0%BD%D0%B0&amp;diff=27240</id>
		<title>Построение по НКА эквивалентного ДКА, алгоритм Томпсона</title>
		<link rel="alternate" type="text/html" href="https://nerc.itmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D0%9D%D0%9A%D0%90_%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D0%94%D0%9A%D0%90,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%A2%D0%BE%D0%BC%D0%BF%D1%81%D0%BE%D0%BD%D0%B0&amp;diff=27240"/>
				<updated>2012-09-30T15:53:49Z</updated>
		
		<summary type="html">&lt;p&gt;95.25.13.249: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Построение эквивалентного ДКА по НКА ==&lt;br /&gt;
&lt;br /&gt;
Пусть нам дан произвольный [[Недетерминированные конечные автоматы|НКА]]: &amp;lt;tex&amp;gt;\langle \Sigma , Q, s \in Q, T \subset Q, \delta : Q \times \Sigma \to 2^Q \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим по нему следующий [[Детерминированные конечные автоматы|ДКА]]: &amp;lt;tex&amp;gt;\langle \Sigma , Q_d, s_d \in Q_d, T_d \subset Q_d, \delta_d : Q_d \times \Sigma \to Q_d \rangle&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
# &amp;lt;tex&amp;gt;Q_d = 2^Q&amp;lt;/tex&amp;gt;,&lt;br /&gt;
# &amp;lt;tex&amp;gt;s_d = \{s\}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
# &amp;lt;tex&amp;gt;T_d = \{q \in Q_d \mid \exists p \in T : p \in q\}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
# &amp;lt;tex&amp;gt;\delta_d(q, c) = \{ \delta(a, c) \mid a \in q \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Доказательство эквивалентности===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Построенный ДКА эквивалентен данному НКА.&lt;br /&gt;
|proof=&lt;br /&gt;
#Докажем, что любое слово, которое принимает НКА, будет принято построенным ДКА. Заметим, что &amp;lt;tex&amp;gt;\forall q \in q_d, \forall c \in \Sigma, \forall p \in \delta(q, c): p \in \delta_d(q_d, c)&amp;lt;/tex&amp;gt;. Рассмотрим слово &amp;lt;tex&amp;gt;w=w_1...w_m&amp;lt;/tex&amp;gt;, которое принимает автомат НКА: &amp;lt;tex&amp;gt;\langle s, w_1w_2...w_m \rangle \vdash \langle u_1, w_2...w_m \rangle \vdash \langle u_m, \varepsilon \rangle, u_m \in T&amp;lt;/tex&amp;gt;. Проверим, что построенный ДКА тоже принимает это слово. Заметим, что &amp;lt;tex&amp;gt;s \in s_d&amp;lt;/tex&amp;gt;, а, значит, исходя из нашего наблюдения, мы получаем, что &amp;lt;tex&amp;gt;u_1 \in {u_d}_1&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;{u_d}_1 = \delta_d(s, w_1)&amp;lt;/tex&amp;gt;. Далее, несложно заметить, что &amp;lt;tex&amp;gt;\forall i \leq m : u_i \in {u_d}_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\langle s_d, w_1w_2...w_m \rangle \vdash \langle {u_d}_1, w_2...w_m \rangle \vdash \langle {u_d}_i, w_{i + 1}...w_m\rangle&amp;lt;/tex&amp;gt;. Таким образом, &amp;lt;tex&amp;gt;u_m \in {u_d}_m&amp;lt;/tex&amp;gt;, а из определения терминальных состояний в построенном ДКА мы получаем, что &amp;lt;tex&amp;gt;{u_d}_m \in T_d&amp;lt;/tex&amp;gt;, то есть наш ДКА тоже принимает cлово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Докажем, что любое слово, которое принимает построенный ДКА, принимает и НКА. Сначала сделаем наблюдение, что если &amp;lt;tex&amp;gt;q_d=\{q\}&amp;lt;/tex&amp;gt;, и мы из него достигли по строке &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; какого-то состояния &amp;lt;tex&amp;gt;p_d&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\forall p \in p_d&amp;lt;/tex&amp;gt; существует путь из &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; в НКА по строке &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Рассмотрим слово &amp;lt;tex&amp;gt;w=w_1...w_m&amp;lt;/tex&amp;gt;, которое принимает автомат ДКА: &amp;lt;tex&amp;gt;\langle s_d, w_1w_2...w_m \rangle \vdash \langle {u_d}_1, w_2...w_m \rangle \vdash \langle {u_d}_m, \varepsilon \rangle, {u_d}_m \in T_d&amp;lt;/tex&amp;gt;. Проверим, что НКА тоже принимает это слово. Так как &amp;lt;tex&amp;gt;s_d = \{s\}&amp;lt;/tex&amp;gt;, и мы из &amp;lt;tex&amp;gt;s_d&amp;lt;/tex&amp;gt; достигли &amp;lt;tex&amp;gt;{u_d}_m \in T_d&amp;lt;/tex&amp;gt;, возьмём любое терминальное состояние &amp;lt;tex&amp;gt;u_m \in {u_d}_m&amp;lt;/tex&amp;gt;. По нашему наблюдению в НКА есть путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;u_m&amp;lt;/tex&amp;gt; по строке &amp;lt;tex&amp;gt;w&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;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} очередь состояний, соответствующих множествам, состоящих из состояний НКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} стартовое состояние НКА.&lt;br /&gt;
  &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;.push({&amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;})&lt;br /&gt;
  while not isEmpty(&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;)&lt;br /&gt;
      &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;.pop(&amp;lt;tex&amp;gt;q_d&amp;lt;/tex&amp;gt;)&lt;br /&gt;
      for &amp;lt;tex&amp;gt;c \in \Sigma&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;p_d&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
          for &amp;lt;tex&amp;gt;q \in q_d&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;p_d&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;p_d \cup \{ \delta(q, c) \}&amp;lt;/tex&amp;gt;&lt;br /&gt;
          if not visited[&amp;lt;tex&amp;gt;p_d&amp;lt;/tex&amp;gt;]&lt;br /&gt;
             &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;.push(&amp;lt;tex&amp;gt;p_d&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
===Асимптотика===&lt;br /&gt;
Так как количество подмножеств множества состояний НКА не более, чем &amp;lt;tex&amp;gt;2^n&amp;lt;/tex&amp;gt;, а каждое подмножество мы обрабатываем ровно один раз за время &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, получаем верхнюю оценку времени работы алгоритма {{---}} &amp;lt;tex&amp;gt;O(n \cdot 2^n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
Пусть нам дан [[Недетерминированные конечные автоматы|недетерминированный конечный автомат]]: [[Файл:DKA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
По нашему заданию эквивалентного ДКА мы получаем: [[Файл:NKA_definition.png|400px]]&lt;br /&gt;
&lt;br /&gt;
#Помещаем в очередь множество из одной стартовой вершины — &amp;lt;tex&amp;gt;\{1\}&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;Q = \{\{1\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Достаём из очереди множество &amp;lt;tex&amp;gt;\{1\}&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;Q = \{\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#&amp;lt;tex&amp;gt;q_d(\{1\}, a) = \{1, 2\}&amp;lt;/tex&amp;gt;, кладём множество &amp;lt;tex&amp;gt;\{1, 2\}&amp;lt;/tex&amp;gt; в очередь: &amp;lt;tex&amp;gt;Q = \{\{1, 2\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#&amp;lt;tex&amp;gt;q_d(\{1\}, b) = \{1\}&amp;lt;/tex&amp;gt;, нам не надо класть множество &amp;lt;tex&amp;gt;\{1\}&amp;lt;/tex&amp;gt; в очередь, так как оно уже там было.&lt;br /&gt;
#Достаём из очереди множество &amp;lt;tex&amp;gt;\{1, 2\}&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;Q = \{\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#&amp;lt;tex&amp;gt;q_d(\{1, 2\}, a) = \{1, 2\}&amp;lt;/tex&amp;gt;, нам не надо класть множество &amp;lt;tex&amp;gt;\{1, 2\}&amp;lt;/tex&amp;gt; в очередь, так как оно уже там было.&lt;br /&gt;
#&amp;lt;tex&amp;gt;q_d(\{1, 2\}, b) = \{1, 2\}&amp;lt;/tex&amp;gt;, нам не надо класть множество &amp;lt;tex&amp;gt;\{1, 2\}&amp;lt;/tex&amp;gt; в очередь, так как оно уже там было.&lt;br /&gt;
#Помечаем все терминальные вершины, в данном случае — &amp;lt;tex&amp;gt;\{1, 2\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получаем ДКА, эквивалентный исходному: [[Файл:NKA_algorithm.png|400px]].&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>95.25.13.249</name></author>	</entry>

	<entry>
		<id>https://nerc.itmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D0%9D%D0%9A%D0%90_%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D0%94%D0%9A%D0%90,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%A2%D0%BE%D0%BC%D0%BF%D1%81%D0%BE%D0%BD%D0%B0&amp;diff=27239</id>
		<title>Построение по НКА эквивалентного ДКА, алгоритм Томпсона</title>
		<link rel="alternate" type="text/html" href="https://nerc.itmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D0%9D%D0%9A%D0%90_%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D0%94%D0%9A%D0%90,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%A2%D0%BE%D0%BC%D0%BF%D1%81%D0%BE%D0%BD%D0%B0&amp;diff=27239"/>
				<updated>2012-09-29T21:54:06Z</updated>
		
		<summary type="html">&lt;p&gt;95.25.13.249: /* Пример */ какой ужас&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Построение эквивалентного ДКА по НКА ==&lt;br /&gt;
&lt;br /&gt;
Пусть нам дан произвольный [[Недетерминированные конечные автоматы|НКА]]: &amp;lt;tex&amp;gt;\langle \Sigma , Q, s \in Q, T \subset Q, \delta : Q \times \Sigma \to 2^Q \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим по нему следующий [[Детерминированные конечные автоматы|ДКА]]: &amp;lt;tex&amp;gt;\langle \Sigma , Q_d, s_d \in Q_d, T_d \subset Q_d, \delta_d : Q_d \times \Sigma \to Q_d \rangle&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
# &amp;lt;tex&amp;gt;Q_d = 2^Q&amp;lt;/tex&amp;gt;,&lt;br /&gt;
# &amp;lt;tex&amp;gt;s_d = \{s\}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
# &amp;lt;tex&amp;gt;T_d = \{q \in Q_d \mid \exists p \in T : p \in q\}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
# &amp;lt;tex&amp;gt;\delta_d(q, c) = \{ \delta(a, c) \mid a \in q \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Доказательство эквивалентности===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Построенный ДКА эквивалентен данному НКА.&lt;br /&gt;
|proof=&lt;br /&gt;
#Докажем, что любое слово, которое принимает НКА, будет принято построенным ДКА. Заметим, что &amp;lt;tex&amp;gt;\forall q \in q_d, \forall c \in \Sigma, \forall p \in \delta(q, c): p \in \delta_d(q_d, c)&amp;lt;/tex&amp;gt;. Рассмотрим слово &amp;lt;tex&amp;gt;w=w_1...w_m&amp;lt;/tex&amp;gt;, которое принимает автомат НКА: &amp;lt;tex&amp;gt;\langle s, w_1w_2...w_m \rangle \vdash \langle u_1, w_2...w_m \rangle \vdash \langle u_m, \varepsilon \rangle, u_m \in T&amp;lt;/tex&amp;gt;. Проверим, что построенный ДКА тоже принимает это слово. Заметим, что &amp;lt;tex&amp;gt;s \in s_d&amp;lt;/tex&amp;gt;, а, значит, исходя из нашего наблюдения, мы получаем, что &amp;lt;tex&amp;gt;u_1 \in {u_d}_1&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;{u_d}_1 = \delta_d(s, w_1)&amp;lt;/tex&amp;gt;. Далее, несложно заметить, что &amp;lt;tex&amp;gt;\forall i \leq m : u_i \in {u_d}_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\langle s_d, w_1w_2...w_m \rangle \vdash \langle {u_d}_1, w_2...w_m \rangle \vdash \langle {u_d}_i, w_{i + 1}...w_m\rangle&amp;lt;/tex&amp;gt;. Таким образом, &amp;lt;tex&amp;gt;u_m \in {u_d}_m&amp;lt;/tex&amp;gt;, а из определения терминальных состояний в построенном ДКА мы получаем, что &amp;lt;tex&amp;gt;{u_d}_m \in T_d&amp;lt;/tex&amp;gt;, то есть наш ДКА тоже принимает cлово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Докажем, что любое слово, которое принимает построенный ДКА, принимает и НКА. Сначала сделаем наблюдение, что если &amp;lt;tex&amp;gt;q_d=\{q\}&amp;lt;/tex&amp;gt;, и мы из него достигли по строке &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; какого-то состояния &amp;lt;tex&amp;gt;p_d&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\forall p \in p_d&amp;lt;/tex&amp;gt; существует путь из &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; в НКА по строке &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Рассмотрим слово &amp;lt;tex&amp;gt;w=w_1...w_m&amp;lt;/tex&amp;gt;, которое принимает автомат ДКА: &amp;lt;tex&amp;gt;\langle s_d, w_1w_2...w_m \rangle \vdash \langle {u_d}_1, w_2...w_m \rangle \vdash \langle {u_d}_m, \varepsilon \rangle, {u_d}_m \in T_d&amp;lt;/tex&amp;gt;. Проверим, что НКА тоже принимает это слово. Так как &amp;lt;tex&amp;gt;s_d = \{s\}&amp;lt;/tex&amp;gt;, и мы из &amp;lt;tex&amp;gt;s_d&amp;lt;/tex&amp;gt; достигли &amp;lt;tex&amp;gt;{u_d}_m \in T_d&amp;lt;/tex&amp;gt;, возьмём любое терминальное состояние &amp;lt;tex&amp;gt;u_m \in {u_d}_m&amp;lt;/tex&amp;gt;. По нашему наблюдению в НКА есть путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;u_m&amp;lt;/tex&amp;gt; по строке &amp;lt;tex&amp;gt;w&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;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} очередь состояний, соответствующих множествам, состоящих из состояний НКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; {{---}} стартовое состояние НКА.&lt;br /&gt;
  &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;.push({&amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;})&lt;br /&gt;
  while not isEmpty(&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;)&lt;br /&gt;
      &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;.pop(&amp;lt;tex&amp;gt;q_d&amp;lt;/tex&amp;gt;)&lt;br /&gt;
      for &amp;lt;tex&amp;gt;c \in \Sigma&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;p_d&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
          for &amp;lt;tex&amp;gt;q \in q_d&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;p_d&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;p_d \cup \{ \delta(q, c) \}&amp;lt;/tex&amp;gt;&lt;br /&gt;
          if not &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;.contains(&amp;lt;tex&amp;gt;p_d&amp;lt;/tex&amp;gt;)&lt;br /&gt;
             &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;.push(&amp;lt;tex&amp;gt;p_d&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
===Асимптотика===&lt;br /&gt;
Так как количество подмножеств множества состояний НКА не более, чем &amp;lt;tex&amp;gt;2^n&amp;lt;/tex&amp;gt;, а каждое подмножество мы обрабатываем ровно один раз за время &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, получаем верхнюю оценку времени работы алгоритма {{---}} &amp;lt;tex&amp;gt;O(n \cdot 2^n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
Пусть нам дан [[Недетерминированные конечные автоматы|недетерминированный конечный автомат]]: [[Файл:DKA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
По нашему заданию эквивалентного ДКА мы получаем: [[Файл:NKA_definition.png|400px]]&lt;br /&gt;
&lt;br /&gt;
#Помещаем в очередь множество из одной стартовой вершины — &amp;lt;tex&amp;gt;\{1\}&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;Q = \{\{1\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Достаём из очереди множество &amp;lt;tex&amp;gt;\{1\}&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;Q = \{\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#&amp;lt;tex&amp;gt;q_d(\{1\}, a) = \{1, 2\}&amp;lt;/tex&amp;gt;, кладём множество &amp;lt;tex&amp;gt;\{1, 2\}&amp;lt;/tex&amp;gt; в очередь: &amp;lt;tex&amp;gt;Q = \{\{1, 2\}\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#&amp;lt;tex&amp;gt;q_d(\{1\}, b) = \{1\}&amp;lt;/tex&amp;gt;, нам не надо класть множество &amp;lt;tex&amp;gt;\{1\}&amp;lt;/tex&amp;gt; в очередь, так как оно уже там было.&lt;br /&gt;
#Достаём из очереди множество &amp;lt;tex&amp;gt;\{1, 2\}&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;Q = \{\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#&amp;lt;tex&amp;gt;q_d(\{1, 2\}, a) = \{1, 2\}&amp;lt;/tex&amp;gt;, нам не надо класть множество &amp;lt;tex&amp;gt;\{1, 2\}&amp;lt;/tex&amp;gt; в очередь, так как оно уже там было.&lt;br /&gt;
#&amp;lt;tex&amp;gt;q_d(\{1, 2\}, b) = \{1, 2\}&amp;lt;/tex&amp;gt;, нам не надо класть множество &amp;lt;tex&amp;gt;\{1, 2\}&amp;lt;/tex&amp;gt; в очередь, так как оно уже там было.&lt;br /&gt;
#Помечаем все терминальные вершины, в данном случае — &amp;lt;tex&amp;gt;\{1, 2\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получаем ДКА, эквивалентный исходному: [[Файл:NKA_algorithm.png|400px]].&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>95.25.13.249</name></author>	</entry>

	</feed>