Минимизация ДКА, алгоритм за O(n^2) с построением пар различимых состояний

Материал из Викиконспекты
Версия от 22:22, 5 ноября 2011; 192.168.0.2 (обсуждение) (Новая страница: «==Определения== {{Определение |definition = Состояния <tex>u</tex> и <tex>v</tex> различимы строкой <tex>s</tex> е...»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Определения

Определение:
Состояния [math]u[/math] и [math]v[/math] различимы строкой [math]s[/math] если
  1. [math] \langle u, s \rangle \vdash^* \langle t, \varepsilon \rangle [/math], где [math]t \in T [/math]
  2. [math] \langle v, s \rangle \vdash^* \langle z, \varepsilon \rangle [/math], где [math]z \notin T [/math]


Определение:
Состояния [math]u[/math] и [math]v[/math] эквивалентны, если они неразличимы никакой строкой [math]s[/math].


Теорема:
Если [math]u[/math] и [math]v[/math], [math]v[/math] и [math]z[/math] эквивалентны, то [math]u[/math] и [math]z[/math] эквивалентны.
Доказательство:
[math]\triangleright[/math]

Пусть [math]u[/math] и [math]z[/math] неэквивалентны. Тогда [math] \mathcal {9} s[/math], такой, что

  1. [math] \langle u, s \rangle \vdash^* \langle t, \varepsilon \rangle [/math], где [math]t \in T [/math]
  2. [math] \langle z, s \rangle \vdash^* \langle t_1, \varepsilon \rangle [/math], где [math]t_1 \notin T [/math].

Рассмотрим [math]x[/math], такой, что [math] \langle v, s \rangle \vdash^* \langle x, \varepsilon \rangle [/math].
Если [math]x \in T[/math], то [math]v[/math] и [math]z[/math] различимы строкой [math]s[/math]. Противоречие.
Если [math]x \notin T[/math], то [math]u[/math] и [math]v[/math] различимы строкой [math]s[/math]. Противоречие.

Значит, [math]u[/math] и [math]z[/math] эквивалентны.
[math]\triangleleft[/math]

Алгоритм

Основная идея алгоритма разбить состояния на классы эквивалентности — они и будут состояниями минимального автомата. В таблице размером [math]n \times n[/math], где [math]n[/math] — количество состояний автомата будем помечать неэквивалентные состояния. Изначально добавим в очередь [math]Q[/math] пары состояний различимых строкой [math] \varepsilon [/math] и пометим их в таблице. Пока [math]Q[/math] не станет пуста, будем делать следующее:

  1. Извлечем пару [math] \langle u, v \rangle [/math] из [math]Q[/math].
  2. Для всех пар [math] \langle t, k \rangle [/math], таких, что [math] \mathcal {9} c \in \Sigma, \langle t, c \rangle \vdash \langle u, \varepsilon \rangle, \langle k, c \rangle \vdash \langle v, \varepsilon \rangle [/math] и пара [math] \langle t, k \rangle[/math] не отмечена в таблице, то отметим ее в таблице и добавим в [math]Q[/math].

За один проход по таблице согласно теореме разбиваем не помеченные состояния на классы эквивалентности.