Алгоритм Бржозовского — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Корректность)
Строка 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>):
+
# Исходный [[Недетерминированные конечные автоматы|НКА]] (<tex>FA</tex>):<br>[[Файл:Fa.png|Исходный НКА]]
[[Файл:Fa.png|Исходный НКА]]
+
# Первый шаг алгоритма (<tex>\operatorname{rev}(FA)</tex>):<br>[[Файл:Rfa.png|Первый шаг]]
* Первый шаг алгоритма (<tex>rev(FA)</tex>):
+
# Второй шаг алгоритма (<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>det(rev(FA))</tex>):
+
# Заключительный шаг алгоритма (<tex>\operatorname{det}(\operatorname{rev}(\operatorname{det}(\operatorname{rev}(FA))))</tex>):<br>[[Файл:Drdrfa.png|Заключительный шаг]]
[[Файл:Drfa.png|Второй шаг]]
 
 
 
<tex>det()</tex> переименовывает состояния, после этого <tex>0</tex> всегда является начальным состоянием
 
* Третий шаг алгоритма (<tex>rev(det(rev(FA)))</tex>):
 
[[Файл:Rdrfa.png|Третий шаг]]
 
 
 
После выполнения этого шага алгоритма оба состояния <tex>2</tex> и <tex>3</tex> являются начальными.
 
* Заключительный шаг алгоритма (<tex>det(rev(det(rev(FA))))</tex>):
 
[[Файл:Drdrfa.png|Заключительный шаг]]
 
  
 
== Заключение ==
 
== Заключение ==

Версия 17:16, 27 декабря 2014

Эта статья находится в разработке!
Задача:
Пусть дан автомат [math]\mathcal{A}[/math]. Требуется построить автомат [math]\mathcal{A}_{min}[/math] с наименьшим количеством состояний, распознающий тот же язык, что и [math]\mathcal{A}[/math].


Алгоритм

Описание

Алгоритм минимизации конечных автоматов Бржозовского (Janusz A. (John) Brzozowski) выделяется, по крайней мере, следующими качествами:

Обладая обычными процедурами обращения [math]\operatorname{rev}[/math] и детерминизации [math]\operatorname{det}[/math] конечного автомата, мы, с помощью идеи Бржозовского, можем немедленно приступить к минимизации заданного автомата. Для этого надо дважды провести его через обе вышеуказанные процедуры:

[math]mFA = \operatorname {det}(\operatorname{rev}(\operatorname{det}(\operatorname{rev}(FA))))[/math], где

  • [math]FA[/math] это исходный КА,
  • [math]\operatorname{rev}[/math] это процедура обращения КА,
  • [math]\operatorname{det}[/math] это процедура детерминизации КА,
  • [math]mFA[/math] это минимизированный КА.

Корректность

[1]

Пример работы

  1. Исходный НКА ([math]FA[/math]):
    Исходный НКА
  2. Первый шаг алгоритма ([math]\operatorname{rev}(FA)[/math]):
    Первый шаг
  3. Второй шаг алгоритма ([math]\operatorname{det}(\operatorname{rev}(FA))[/math]):
    Второй шаг
    [math]\operatorname{det}[/math] переименовывает состояния, после этого [math]0[/math] всегда является начальным состоянием
  4. Третий шаг алгоритма ([math]\operatorname{rev}(\operatorname{det}(\operatorname{rev}(FA)))[/math]):
    Третий шаг
    После выполнения этого шага алгоритма оба состояния [math]2[/math] и [math]3[/math] являются начальными.
  5. Заключительный шаг алгоритма ([math]\operatorname{det}(\operatorname{rev}(\operatorname{det}(\operatorname{rev}(FA))))[/math]):
    Заключительный шаг

Заключение

Самым эффективным алгоритмом минимизации принято считать алгоритм Хопкрофта, который, как и прочие традиционные алгоритмы, работает только с ДКА. Его асимптотическое время выполнения зависит от логарифма исходных данных. С другой стороны очевидно, что алгоритм Бржозовского в худшем случае будет обладать экспоненциальным временем выполнения, ведь этого требует процедура детерминизации, выполняемая дважды. На практике же наблюдается парадокс, алгоритм Бржозовского во многих случаях опережает прочие подходы к минимизации, включая и алгоритм Хопкрофта. В работе, сравнивающей оба алгоритма, показано, что алгоритм Бржозовского оказывается эффективнее алгоритма Хопкрофта для автоматов с большим числом переходов.

См. также

Литература

  1. Алгоритм Бржозовского для минимизации конечного автомата
  2. Deian Tabakov, Moshe Y. Vardi. Experimental evaluation of classical automata constructions