<?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=Dipssy17</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=Dipssy17"/>
		<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/Dipssy17"/>
		<updated>2026-04-16T14:18:20Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B8%D0%BD%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%94%D0%9A%D0%90,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%B7%D0%B0_O(n%5E2)_%D1%81_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D0%B0%D1%80_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%B8%D0%BC%D1%8B%D1%85_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B9&amp;diff=73011</id>
		<title>Минимизация ДКА, алгоритм за O(n^2) с построением пар различимых состояний</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B8%D0%BD%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%94%D0%9A%D0%90,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%B7%D0%B0_O(n%5E2)_%D1%81_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D0%B0%D1%80_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%B8%D0%BC%D1%8B%D1%85_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B9&amp;diff=73011"/>
				<updated>2020-03-20T13:00:36Z</updated>
		
		<summary type="html">&lt;p&gt;Dipssy17: можно было догадаться, тем не менее, не было очевидно, что это имеется в виду&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Пусть дан [[Детерминированные_конечные_автоматы | автомат]] &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;. Требуется построить автомат &amp;lt;tex&amp;gt;\mathcal{A}_{min}&amp;lt;/tex&amp;gt; с наименьшим количеством состояний, распознающий тот же язык, что и &amp;lt;tex&amp;gt;\mathcal{A}&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;
Для реализации алгоритма нам потребуются [[Очередь | очередь]] &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; и таблица &amp;lt;tex&amp;gt;marked&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;n \times n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — количество состояний автомата. Будем помечать в таблице пары [[Эквивалентность состояний ДКА | неэквивалентных состояний]] и класть их в очередь.&lt;br /&gt;
&lt;br /&gt;
* В исходном автомате мы имели &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; состояний с номерами от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;. Удобно будет увеличить все номера состояний на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; и добавить в исходный автомат вершину &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;, в которую будут вести по умолчанию все переходы по всем символам (в том числе переходы по всем символам в эту вершину из неё самой), которых не было в исходном автомате, тем самым увеличив количество состояний &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Теперь стартовое состояние будет иметь номер &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* '''Шаг 1'''. Построим множество &amp;lt;tex&amp;gt;\delta^{-1}&amp;lt;/tex&amp;gt;, в котором будем хранить списки обратных ребер.&lt;br /&gt;
* '''Шаг 2'''. Найдем все достижимые состояния из стартового. Например, с помощью [[Обход_в_глубину,_цвета_вершин | обхода в глубину]].&lt;br /&gt;
* '''Шаг 3'''. Добавим в очередь &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; пары состояний, различимых строкой &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt;, и пометим их в таблице.&lt;br /&gt;
* '''Шаг 4'''. Для каждой непомеченной пары &amp;lt;tex&amp;gt; \langle u, v \rangle &amp;lt;/tex&amp;gt; нужно проверить, что &amp;lt;tex&amp;gt;\mathcal {9} c \in \Sigma&amp;lt;/tex&amp;gt; такой, что пара &amp;lt;tex&amp;gt;\langle \delta(u, c), \delta(v, c) \rangle&amp;lt;/tex&amp;gt; помечена. Тогда мы можем пометить пару &amp;lt;tex&amp;gt; \langle u, v \rangle &amp;lt;/tex&amp;gt;.&lt;br /&gt;
: Пока &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; не станет пуста, будем делать следующее:&lt;br /&gt;
: 1. Извлечем пару &amp;lt;tex&amp;gt; \langle u, v \rangle &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. &lt;br /&gt;
: 2. Для каждого символа &amp;lt;tex&amp;gt;c \in \Sigma&amp;lt;/tex&amp;gt; перебираем пары состояний &amp;lt;tex&amp;gt;\langle \delta^{-1}(u, c), \delta^{-1}(v,c) \rangle&amp;lt;/tex&amp;gt;. Если находим ещё непомеченную пару, то помечаем её в таблице и кладем в очередь.&lt;br /&gt;
: В момент опустошения очереди пары состояний, не помеченные в таблице, являются парами эквивалентных состояний. &lt;br /&gt;
* '''Шаг 5'''. За один проход по таблице разбиваем пары эквивалентных состояний на классы эквивалентности.&lt;br /&gt;
* '''Шаг 6'''. За один проход по списку классов эквивалентности выделяем список новых состояний и переходов между ними.&lt;br /&gt;
Стартовым состоянием полученного автомата будет состояние, соответствующее классу эквивалентности, содержащему стартовое состояние исходного автомата.&lt;br /&gt;
&lt;br /&gt;
Терминальными состояниями полученного автомата будут состояния, соответствующие классам эквивалентности, содержащим терминальные состояния исходного автомата.&lt;br /&gt;
&lt;br /&gt;
===Корректность===&lt;br /&gt;
Пусть в результате применения данного алгоритма к автомату &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; мы получили автомат &amp;lt;tex&amp;gt;\mathcal{A}_{min}&amp;lt;/tex&amp;gt;. Докажем, что этот автомат минимальный и единственный с точностью до изоморфизма.&lt;br /&gt;
&lt;br /&gt;
Пусть существует автомат &amp;lt;tex&amp;gt;\mathcal{A}'&amp;lt;/tex&amp;gt;, эквивалентный &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, но с числом состояний меньшим, чем в &amp;lt;tex&amp;gt;\mathcal{A}_{min}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Стартовые состояния &amp;lt;tex&amp;gt;s \in \mathcal{A}_{min}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;s' \in \mathcal{A}'&amp;lt;/tex&amp;gt; эквивалентны, так как &amp;lt;tex&amp;gt;\mathcal{A}_{min}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{A}'&amp;lt;/tex&amp;gt; допускают один и тот же язык. Рассмотрим строку &amp;lt;tex&amp;gt;\alpha = a_1a_2 \ldots a_{k}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a_{i} \in \Sigma&amp;lt;/tex&amp;gt;, такую, что &amp;lt;tex&amp;gt; \langle s, \alpha \rangle \vdash^* \langle u, \varepsilon \rangle &amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; \langle s', \alpha \rangle \vdash^* \langle u', \varepsilon \rangle &amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;\langle s, a_1 \rangle \vdash^* \langle l, \varepsilon \rangle &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\langle s', a_1 \rangle \vdash^* \langle l', \varepsilon \rangle &amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;s'&amp;lt;/tex&amp;gt; эквивалентны, то &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;l'&amp;lt;/tex&amp;gt; эквивалентны. Аналогично для всех &amp;lt;tex&amp;gt;a_{i}&amp;lt;/tex&amp;gt;. В итоге получим, что &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; эквивалентно &amp;lt;tex&amp;gt;u'&amp;lt;/tex&amp;gt;. Значит, для каждого состояния из &amp;lt;tex&amp;gt;\mathcal{A}_{min}&amp;lt;/tex&amp;gt; существует эквивалентное состояние из &amp;lt;tex&amp;gt;\mathcal{A}'&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Состояний в &amp;lt;tex&amp;gt;A'&amp;lt;/tex&amp;gt; меньше, чем в &amp;lt;tex&amp;gt;\mathcal{A}_{min}&amp;lt;/tex&amp;gt;, значит двум состояниям из &amp;lt;tex&amp;gt;\mathcal{A}_{min}&amp;lt;/tex&amp;gt; эквивалентно одно состояние из &amp;lt;tex&amp;gt;\mathcal{A}'&amp;lt;/tex&amp;gt;. Тогда эти два состояния эквивалентны, но автомат &amp;lt;tex&amp;gt;\mathcal{A}_{min}&amp;lt;/tex&amp;gt; построен так, что в нем нет эквивалентных состояний. Противоречие.&lt;br /&gt;
&lt;br /&gt;
Так как каждому состоянию из &amp;lt;tex&amp;gt;\mathcal{A}_{min}&amp;lt;/tex&amp;gt; эквивалентно состояние из &amp;lt;tex&amp;gt;\mathcal{A}'&amp;lt;/tex&amp;gt;, то автоматы &amp;lt;tex&amp;gt;\mathcal{A}_{min}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{A}'&amp;lt;/tex&amp;gt; изоморфны.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод ==&lt;br /&gt;
Функция для построения таблицы неэквивалентности.&lt;br /&gt;
 '''boolean'''[][] buildTable('''int''' n, '''boolean'''[] isTerminal, '''vector'''[][] &amp;lt;tex&amp;gt;\delta^{-1}&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''queue''' Q&lt;br /&gt;
    '''boolean''' marked[n][n]&lt;br /&gt;
    &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Шаг 3&amp;lt;/font&amp;gt;&lt;br /&gt;
    '''for''' i = 0&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;n - 1&lt;br /&gt;
       '''for''' j = 0&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;n - 1&lt;br /&gt;
          '''if''' '''not''' marked[i][j] '''and''' isTerminal[i] != isTerminal[j]&lt;br /&gt;
             marked[i][j] = marked[j][i] = ''true''&lt;br /&gt;
             Q.push(&amp;lt;tex&amp;gt;\langle i, j \rangle&amp;lt;/tex&amp;gt;)&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Шаг 4&amp;lt;/font&amp;gt;&lt;br /&gt;
    '''while''' '''not''' Q.isEmpty()&lt;br /&gt;
       &amp;lt;tex&amp;gt;\langle u, v \rangle&amp;lt;/tex&amp;gt; = Q.poll()&lt;br /&gt;
       '''for''' c &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt;&lt;br /&gt;
          '''for''' r &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\delta^{-1}&amp;lt;/tex&amp;gt;[u][c]&lt;br /&gt;
             '''for''' s &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\delta^{-1}&amp;lt;/tex&amp;gt;[v][c]	&lt;br /&gt;
                '''if''' '''not''' marked[r][s]&lt;br /&gt;
                   marked[r][s] = marked[s][r] = ''true''&lt;br /&gt;
                   Q.push(&amp;lt;tex&amp;gt;\langle r, s \rangle&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    '''return''' marked&lt;br /&gt;
&lt;br /&gt;
Основная функция алгоритма.				   &lt;br /&gt;
 '''function''' minimization('''int''' n, '''boolean'''[] isTerminal, '''int'''[][] &amp;lt;tex&amp;gt;\delta&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Шаг 1&amp;lt;/font&amp;gt;&lt;br /&gt;
    Построим таблицу списков обратных ребер {{---}} &amp;lt;tex&amp;gt;\delta^{-1}&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;n \times n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
    &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Шаг 2&amp;lt;/font&amp;gt;&lt;br /&gt;
    Построим массив достижимости состояний из стартового {{---}} reachable размером &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
    &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Шаги 3 и 4&amp;lt;/font&amp;gt;&lt;br /&gt;
    '''boolean'''[][] marked = buildTable(n, isTerminal, &amp;lt;tex&amp;gt;\delta^{-1}&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Шаг 5&amp;lt;/font&amp;gt;&lt;br /&gt;
    '''int'''[] component[n] &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// По позиции i будем хранить номер компоненты эквивалентности для i-ого состояния.&amp;lt;/font&amp;gt;&lt;br /&gt;
    fill(component, -1)&lt;br /&gt;
    '''for''' i = 0&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;n - 1&lt;br /&gt;
       '''if''' '''not''' marked[0][i]&lt;br /&gt;
          component[i] = 0&lt;br /&gt;
 	&lt;br /&gt;
    '''int''' componentsCount = 0&lt;br /&gt;
    '''for''' i = 1&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;n - 1&lt;br /&gt;
       '''if''' '''not''' reachable[i]&lt;br /&gt;
          ''continue''&lt;br /&gt;
       '''if''' component[i] == -1&lt;br /&gt;
          componentsCount++&lt;br /&gt;
          component[i] = componentsCount&lt;br /&gt;
          '''for''' j = i + 1&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;n - 1&lt;br /&gt;
             '''if''' '''not''' marked[i][j]&lt;br /&gt;
                component[j] = componentsCount&lt;br /&gt;
    &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Шаг 6&amp;lt;/font&amp;gt;&lt;br /&gt;
    buildDFA(component) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Строим требуемый автомат.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Асимптотика==&lt;br /&gt;
Поиск недостижимых состояний с помощью [[Обход_в_глубину,_цвета_вершин | обхода в глубину]] требует &amp;lt;tex&amp;gt;\mathcal{O}(n \cdot |\Sigma|)&amp;lt;/tex&amp;gt; времени. Каждую пару мы добавляли в очередь один раз, значит время заполнения таблицы &amp;lt;tex&amp;gt;\mathcal{O}(n^2)&amp;lt;/tex&amp;gt;. Разбиение на классы эквивалентности делается за один проход по таблице, то есть за &amp;lt;tex&amp;gt;\mathcal{O}(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Пример работы==&lt;br /&gt;
Минимизируем данный автомат:&lt;br /&gt;
&lt;br /&gt;
[[Файл:dka.png]]&lt;br /&gt;
&lt;br /&gt;
=== Шаг &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; ===&lt;br /&gt;
Строим &amp;lt;tex&amp;gt;\delta^{-1}&amp;lt;/tex&amp;gt;. Например, &amp;lt;tex&amp;gt;\delta^{-1}(F, 1) = \{C, D, G, F\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Шаг &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; ===&lt;br /&gt;
Построили массив достижимости состояний из стартового.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; width=&amp;quot;20%&amp;quot; style=&amp;quot;color: blue; background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;; float: left;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
!'''Ø'''&lt;br /&gt;
! A&lt;br /&gt;
! B&lt;br /&gt;
! C&lt;br /&gt;
! D&lt;br /&gt;
! E&lt;br /&gt;
! F&lt;br /&gt;
! G&lt;br /&gt;
! H&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Шаг &amp;lt;tex&amp;gt; 3 &amp;lt;/tex&amp;gt;===&lt;br /&gt;
Инициализировали таблицу.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; width=&amp;quot;20%&amp;quot; style=&amp;quot;color: blue; background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;; float: left;&amp;quot; &lt;br /&gt;
!&lt;br /&gt;
!'''Ø'''&lt;br /&gt;
! A&lt;br /&gt;
! B&lt;br /&gt;
! C&lt;br /&gt;
! D&lt;br /&gt;
! E&lt;br /&gt;
! F&lt;br /&gt;
! G&lt;br /&gt;
! H&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;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! A&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! B&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! C&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! D&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! E&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! F&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|-&lt;br /&gt;
! G&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|-&lt;br /&gt;
! H&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Вычислили таблицу.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; width=&amp;quot;20%&amp;quot; style=&amp;quot;color: blue; background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;; float: left;&amp;quot; &lt;br /&gt;
! &lt;br /&gt;
!'''Ø'''&lt;br /&gt;
! A&lt;br /&gt;
! B&lt;br /&gt;
! C&lt;br /&gt;
! D&lt;br /&gt;
! E&lt;br /&gt;
! F&lt;br /&gt;
! G&lt;br /&gt;
! H&lt;br /&gt;
|-&lt;br /&gt;
!'''Ø'''&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|-&lt;br /&gt;
! A&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|-&lt;br /&gt;
! B&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|-&lt;br /&gt;
! C&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|-&lt;br /&gt;
! D&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|-&lt;br /&gt;
! E&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|-&lt;br /&gt;
! F&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|-&lt;br /&gt;
! G&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|-&lt;br /&gt;
! H&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| &amp;lt;font color=&amp;quot;black&amp;quot;&amp;gt;● &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Шаг &amp;lt;tex&amp;gt; 5 &amp;lt;/tex&amp;gt; ===&lt;br /&gt;
Из таблицы видно, что классы эквивалентных состояний это &amp;lt;tex&amp;gt;  \{A, B\}, \{C, D\}, \{F, G\}, \{E\}, \{H\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Шаг &amp;lt;tex&amp;gt; 6 &amp;lt;/tex&amp;gt; ===&lt;br /&gt;
Итого получили такой автомат:&lt;br /&gt;
&lt;br /&gt;
[[Файл:dkaMin.png]]&lt;br /&gt;
&lt;br /&gt;
== См. также == &lt;br /&gt;
* [[Минимизация ДКА, алгоритм Хопкрофта (сложность O(n log n))]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' Введение в теорию автоматов, языков и вычислений, 2-е издание. Пер. с англ. — М.: Издательский дом «Вильямс», 2002. — С. 171 - 182. — ISBN 5-8459-0261-4&lt;br /&gt;
* [[wikipedia:ru:DFA_minimization | Wikipedia {{---}} DFA minimization]]&lt;br /&gt;
* [http://www.eecs.berkeley.edu/~sseshia/172/lectures/Lecture6.pdf Sanjit A. Seshia, &amp;quot;Minimization of DFAs&amp;quot;]&lt;br /&gt;
* [http://www.comp.nus.edu.sg/~cs4212/dfa-min.pdf National University of Singapore, &amp;quot;DFA Minimization&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;br /&gt;
[[Категория: Минимизация ДКА ]]&lt;/div&gt;</summary>
		<author><name>Dipssy17</name></author>	</entry>

	</feed>