Алгоритм Бржозовского — различия между версиями
(→Корректность) |
|||
Строка 13: | Строка 13: | ||
* Он работает даже с [[Недетерминированные конечные автоматы|недетерминированными конечными автоматами]]. | * Он работает даже с [[Недетерминированные конечные автоматы|недетерминированными конечными автоматами]]. | ||
− | Обладая обычными процедурами обращения <tex>rev</tex> и детерминизации <tex>det</tex> конечного [[Детерминированные конечные автоматы|автомата]], мы, с помощью идеи Бржозовского, можем немедленно приступить к минимизации заданного [[Детерминированные конечные автоматы|автомата]]. Для этого надо дважды провести его через обе вышеуказанные процедуры: | + | Обладая обычными процедурами обращения <tex>\operatorname{rev}</tex> и детерминизации <tex>\operatorname{det}</tex> конечного [[Детерминированные конечные автоматы|автомата]], мы, с помощью идеи Бржозовского, можем немедленно приступить к минимизации заданного [[Детерминированные конечные автоматы|автомата]]. Для этого надо дважды провести его через обе вышеуказанные процедуры: |
− | <tex>mFA = det(rev(det(rev(FA))))</tex>, где | + | <tex>mFA = \operatorname {det}(\operatorname{rev}(\operatorname{det}(\operatorname{rev}(FA))))</tex>, где |
* <tex>FA</tex> это исходный КА, | * <tex>FA</tex> это исходный КА, | ||
− | * <tex>rev</tex> это процедура обращения КА, | + | * <tex>\operatorname{rev}</tex> это процедура обращения КА, |
− | * <tex>det</tex> это процедура детерминизации КА, | + | * <tex>\operatorname{det}</tex> это процедура детерминизации КА, |
* <tex>mFA</tex> это минимизированный КА. | * <tex>mFA</tex> это минимизированный КА. | ||
Строка 26: | Строка 26: | ||
==Пример работы== | ==Пример работы== | ||
− | + | # Исходный [[Недетерминированные конечные автоматы|НКА]] (<tex>FA</tex>):<br>[[Файл:Fa.png|Исходный НКА]] | |
− | [[Файл:Fa.png|Исходный НКА]] | + | # Первый шаг алгоритма (<tex>\operatorname{rev}(FA)</tex>):<br>[[Файл:Rfa.png|Первый шаг]] |
− | + | # Второй шаг алгоритма (<tex>\operatorname{det}(\operatorname{rev}(FA))</tex>):<br>[[Файл:Drfa.png|Второй шаг]]<br><tex>\operatorname{det}</tex> переименовывает состояния, после этого <tex>0</tex> всегда является начальным состоянием | |
− | [[Файл:Rfa.png|Первый шаг]] | + | # Третий шаг алгоритма (<tex>\operatorname{rev}(\operatorname{det}(\operatorname{rev}(FA)))</tex>):<br>[[Файл:Rdrfa.png|Третий шаг]]<br>После выполнения этого шага алгоритма оба состояния <tex>2</tex> и <tex>3</tex> являются начальными. |
− | + | # Заключительный шаг алгоритма (<tex>\operatorname{det}(\operatorname{rev}(\operatorname{det}(\operatorname{rev}(FA))))</tex>):<br>[[Файл:Drdrfa.png|Заключительный шаг]] | |
− | [[Файл:Drfa.png|Второй шаг]] | ||
− | |||
− | <tex>det | ||
− | |||
− | [[Файл:Rdrfa.png|Третий шаг]] | ||
− | |||
− | После выполнения этого шага алгоритма оба состояния <tex>2</tex> и <tex>3</tex> являются начальными. | ||
− | |||
− | [[Файл:Drdrfa.png|Заключительный шаг]] | ||
== Заключение == | == Заключение == |
Версия 17:16, 27 декабря 2014
Задача: |
Пусть дан автомат . Требуется построить автомат с наименьшим количеством состояний, распознающий тот же язык, что и . |
Содержание
Алгоритм
Описание
Алгоритм минимизации конечных автоматов Бржозовского (Janusz A. (John) Brzozowski) выделяется, по крайней мере, следующими качествами:
- Он элегантен и весьма оригинален.
- Он эффективен.
- Он работает даже с недетерминированными конечными автоматами.
Обладая обычными процедурами обращения автомата, мы, с помощью идеи Бржозовского, можем немедленно приступить к минимизации заданного автомата. Для этого надо дважды провести его через обе вышеуказанные процедуры:
и детерминизации конечного, где
- это исходный КА,
- это процедура обращения КА,
- это процедура детерминизации КА,
- это минимизированный КА.
Корректность
Пример работы
- Исходный НКА ( ):
- Первый шаг алгоритма (
- Второй шаг алгоритма (
переименовывает состояния, после этого всегда является начальным состоянием
): - Третий шаг алгоритма (
После выполнения этого шага алгоритма оба состояния и являются начальными.
): - Заключительный шаг алгоритма (
Заключение
Самым эффективным алгоритмом минимизации принято считать алгоритм Хопкрофта, который, как и прочие традиционные алгоритмы, работает только с ДКА. Его асимптотическое время выполнения зависит от логарифма исходных данных. С другой стороны очевидно, что алгоритм Бржозовского в худшем случае будет обладать экспоненциальным временем выполнения, ведь этого требует процедура детерминизации, выполняемая дважды. На практике же наблюдается парадокс, алгоритм Бржозовского во многих случаях опережает прочие подходы к минимизации, включая и алгоритм Хопкрофта. В работе, сравнивающей оба алгоритма, показано, что алгоритм Бржозовского оказывается эффективнее алгоритма Хопкрофта для автоматов с большим числом переходов.
См. также
- Минимизация ДКА, алгоритм за O(n^2) с построением пар различимых состояний
- Минимизация ДКА, алгоритм Хопкрофта (сложность O(n log n))