Минимизация ДКА, алгоритм за O(n^2) с построением пар различимых состояний — различия между версиями
Petrova (обсуждение | вклад) |
|||
Строка 45: | Строка 45: | ||
==Пример== | ==Пример== | ||
+ | Минимизируем данный автомат. <br> | ||
+ | [[Файл:dka.jpg]] | ||
+ | <br> | ||
+ | Будем рассматривать только нижний треугольник таблицы пар различимых состояний. <br> | ||
+ | Отметили состояния, различающиеся строкой <tex>\varepsilon</tex> | ||
+ | {| border = "1" | ||
+ | |B | ||
+ | | | ||
+ | |colspan = "6"| | ||
+ | |- | ||
+ | |C | ||
+ | | | ||
+ | | | ||
+ | |colspan = "5"| | ||
+ | |- | ||
+ | |D | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | |colspan = "4"| | ||
+ | |- | ||
+ | |E | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | |colspan = "3"| | ||
+ | |- | ||
+ | |F | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |colspan = "2"| | ||
+ | |- | ||
+ | |G | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | | | ||
+ | |colspan = "1"| | ||
+ | |- | ||
+ | |H | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | |x | ||
+ | |x | ||
+ | |- | ||
+ | | | ||
+ | |A | ||
+ | |B | ||
+ | |C | ||
+ | |D | ||
+ | |E | ||
+ | |F | ||
+ | |G | ||
+ | |} | ||
+ | |||
+ | |||
+ | На момент опустошения очереди | ||
+ | {| border = "1" | ||
+ | |B | ||
+ | | | ||
+ | |colspan = "6"| | ||
+ | |- | ||
+ | |C | ||
+ | |x | ||
+ | |x | ||
+ | |colspan = "5"| | ||
+ | |- | ||
+ | |D | ||
+ | |x | ||
+ | |x | ||
+ | | | ||
+ | |colspan = "4"| | ||
+ | |- | ||
+ | |E | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |colspan = "3"| | ||
+ | |- | ||
+ | |F | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |colspan = "2"| | ||
+ | |- | ||
+ | |G | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | | | ||
+ | |colspan = "1"| | ||
+ | |- | ||
+ | |H | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |x | ||
+ | |- | ||
+ | | | ||
+ | |A | ||
+ | |B | ||
+ | |C | ||
+ | |D | ||
+ | |E | ||
+ | |F | ||
+ | |G | ||
+ | |} | ||
+ | |||
+ | Из таблицы видно, что классы эквивалентных состояний это <tex> \mathcal {f} A, B \mathcal {g}, \mathcal {f} C, D \mathcal {g}, \mathcal {f} F, G \mathcal {g}, \mathcal {f} E \mathcal {g}, \mathcal {f} H \mathcal {g} </tex>. <br> | ||
+ | Итого получили такой автомат: <br> [[Файл:dkaMin.jpg]] |
Версия 04:11, 6 ноября 2011
Определения
Определение: |
Состояния
| и различимы строкой если
Определение: |
Состояния | и эквивалентны, если они неразличимы никакой строкой .
Теорема: |
Если и , и эквивалентны, то и эквивалентны. |
Доказательство: |
Пусть и неэквивалентны. Тогда , такой, что
Рассмотрим |
Алгоритм
Основная идея алгоритма разбить состояния на классы эквивалентности — они и будут состояниями минимального автомата. В таблице размером
, где — количество состояний автомата будем помечать неэквивалентные состояния. Изначально добавим в очередь пары состояний различимых строкой и пометим их в таблице. Пока не станет пуста, будем делать следующее:- Извлечем пару из .
- Для всех пар , таких, что и пара не отмечена в таблице, то отметим ее в таблице и добавим в .
За один проход по таблице согласно теореме разбиваем не помеченные состояния на классы эквивалентности.
Корректность алгоритма
Пусть в результате применения данного алгоритма к автомату
Пусть существует автомат эквивалентный , но с числом состояний меньшим чем в .
Стартовые состояния и эквивалентны, так как и допускают один и тот же язык. Рассмотрим строку , где , такую что , . Пусть и . Так как и эквивалентны, то и эквивалентны. Аналогично для всех . В итоге получим, что эквивалентно . Значит для каждого состояния из существует эквивалентное состояние из
Состояний в меньше чем в , значит двум состояниям из эквивалентно одно состояние из . Тогда эти два состояния эквивалентны, но автомат построен так, что в нем нет эквивалентных состояний. Противоречие.
Так как каждому состоянию из эквивалентно состояние из , то автоматы и изоморфны.
Время работы алгоритма
Каждую пару мы добавляли в очередь один раз, значит время заполнения таблицы
. Разбиение на классы эквивалентности делается за один проход по таблице, то есть за .Пример
Минимизируем данный автомат.
Будем рассматривать только нижний треугольник таблицы пар различимых состояний.
Отметили состояния, различающиеся строкой
B | |||||||
C | |||||||
D | |||||||
E | |||||||
F | x | x | x | x | x | ||
G | x | x | x | x | x | ||
H | x | x | |||||
A | B | C | D | E | F | G |
На момент опустошения очереди
B | |||||||
C | x | x | |||||
D | x | x | |||||
E | x | x | x | x | |||
F | x | x | x | x | x | ||
G | x | x | x | x | x | ||
H | x | x | x | x | x | x | x |
A | B | C | D | E | F | G |
Из таблицы видно, что классы эквивалентных состояний это
Итого получили такой автомат: