Алгоритм Бржозовского — различия между версиями
 (→Описание)  | 
				|||
| Строка 26: | Строка 26: | ||
{{Определение  | {{Определение  | ||
|definition=  | |definition=  | ||
| − | '''Обратное слово''' <tex>r(u)</tex> для слова <tex>u</tex> определяется следующим образом: <tex>r(\varepsilon) = \varepsilon</tex> и если <tex>u = u_1 u_2 u_3 \dotsc u_p</tex>, тогда <tex>r(u) = v_1 v_2 v_3 \dotsc v_p</tex>, где <tex>v_i = u_{p - i + 1}</tex>.  | + | '''Обратное слово''' (англ. ''reverse of the word'') <tex>r(u)</tex> для слова <tex>u</tex> определяется следующим образом: <tex>r(\varepsilon) = \varepsilon</tex> и если <tex>u = u_1 u_2 u_3 \dotsc u_p</tex>, тогда <tex>r(u) = v_1 v_2 v_3 \dotsc v_p</tex>, где <tex>v_i = u_{p - i + 1}</tex>.  | 
}}  | }}  | ||
{{Определение  | {{Определение  | ||
|definition=  | |definition=  | ||
| − | '''Обратный язык''' для языка <tex>L</tex> {{---}} язык <tex>r(L) = \{ u \mid r(u) \in L \}</tex>.  | + | '''Обратный язык''' (англ. ''reverse of the language'') для языка <tex>L</tex> {{---}} язык <tex>r(L) = \{ u \mid r(u) \in L \}</tex>.  | 
}}  | }}  | ||
{{Определение  | {{Определение  | ||
|definition=  | |definition=  | ||
| − | '''Обратный автомат''' для автомата <tex>\mathcal{A} = \langle \Sigma , Q , S , T , \delta \rangle</tex> {{---}} автомат <tex>r(\mathcal{A}) = \langle \Sigma , Q , T , I , r(\delta) \rangle</tex>, полученный из <tex>\mathcal{A}</tex> сменой местами начальных и конечных состояний и сменой направлений переходов.  | + | '''Обратный автомат''' (англ. ''reverse of the automaton'') для автомата <tex>\mathcal{A} = \langle \Sigma , Q , S , T , \delta \rangle</tex> {{---}} автомат <tex>r(\mathcal{A}) = \langle \Sigma , Q , T , I , r(\delta) \rangle</tex>, полученный из <tex>\mathcal{A}</tex> сменой местами начальных и конечных состояний и сменой направлений переходов.  | 
}}  | }}  | ||
Версия 20:06, 12 ноября 2016
| Задача: | 
| Пусть дан автомат . Требуется построить автомат с наименьшим количеством состояний, распознающий тот же язык, что и . | 
Содержание
Описание
Пусть — состояние автомата .
| Определение: | 
| Правым языком (англ. right language) называется язык , распознаваемый автоматом , в котором является уникальным начальным состоянием. | 
| Определение: | 
| Левым языком (англ. left language) называется язык , распознаваемый автоматом , в котором является уникальным терминальным состоянием. | 
Таким образом, допустимые слова языка , проходящие через состояние , фактически разделяются на два языка, а соединение соответствующих слов этих языков по всем состояниям даст исходный язык .
 
Рассмотрим слово  из левого языка . Тогда множество слов  — правый контекст слова  в языке . Аналогично для правого языка и левого контекста.
| Утверждение (1): | 
Автомат является детерминированным тогда и только тогда, когда левые языки его состояний попарно не пересекаются.  | 
| Определение: | 
| Обратное слово (англ. reverse of the word) для слова определяется следующим образом: и если , тогда , где . | 
| Определение: | 
| Обратный язык (англ. reverse of the language) для языка — язык . | 
| Определение: | 
| Обратный автомат (англ. reverse of the automaton) для автомата — автомат , полученный из сменой местами начальных и конечных состояний и сменой направлений переходов. | 
| Утверждение (2): | 
Если  распознает язык , то  распознает .  | 
| Утверждение (3): | 
Если левый язык состояния  в  — , тогда его левый язык в  — . Аналогично для правого языка .  | 
Пусть  — НКА.
Тогда детерминированный автомат  определяется следующим образом:
- Детерминированному состоянию соответствует множество недетерминированных состояний: для каждого имеем ,
 - Начальное состояние в — множество из начальных состояний автомата ,
 - Состояние в детерминированном автомате является терминальным тогда и только тогда, когда оно содержится хотя бы в одном недетерминированном состоянии,
 - Пусть — состояние детерминированного автомата и – символ из . Если переход из по символу определен, тогда, по построению: .
 
| Утверждение (4): | 
Правый язык состояния   эквивалентен объединению правых языков состояний  автомата , принадлежащих множеству .  | 
| Определение: | 
| Левое отношение (англ. left quotient) регулярного языка для слова из — язык . | 
Минимальный автомат  для регулярного языка  определяется следующим образом:
- множество состояний — это множество левых отношений языка ,
 - начальное состояние — ,
 - терминальные состояния — множество отношений, содержащих пустое слово,
 - функция перехода .
 
Автомат уникален с точностью до изоморфизма и имеет минимальное количество состояний.
| Утверждение (5): | 
Детерминированный полный достижимый автомат минимален тогда и только тогда, когда правые языки его состояний различны.  | 
Алгоритм
Описание
Алгоритм минимизации конечных автоматов Бржозовского (Janusz A. (John) Brzozowski) выделяется, по крайней мере, следующими качествами:
- Он элегантен и весьма оригинален.
 - Он эффективен.
 - Он работает даже с недетерминированными конечными автоматами.
 
Введём следующие обозначения:
- — конечный автомат,
 - — детерминизированный автомат для ,
 - — обратный автомат для ,
 - — результат . Аналогично для и .
 
| Теорема (Бржозовский, 1962): | 
Пусть  — автомат (необязательно детерминированный), распознающий язык . Минимальный детерминированный автомат  может быть вычислен следующим образом: .  | 
| Доказательство: | 
| 
 По построению автомат  детерминированный. Согласно утверждению 2, он распознает язык .  | 
Пример работы
-  Исходный НКА :

 -  Первый шаг, :

 -  Второй шаг, :

В детерминизированных автоматах состояния переименованы, так что всегда является начальным состоянием. -  Третий шаг, :

После выполнения этого шага алгоритма оба состояния и являются начальными. -  Заключительный шаг, :

 
Заключение
Самым эффективным алгоритмом минимизации принято считать алгоритм Хопкрофта, который, как и прочие традиционные алгоритмы, работает только с ДКА. Его асимптотическое время выполнения зависит от логарифма исходных данных. С другой стороны очевидно, что алгоритм Бржозовского в худшем случае будет обладать экспоненциальным временем выполнения, ведь этого требует процедура детерминизации, выполняемая дважды. На практике же наблюдается парадокс, алгоритм Бржозовского во многих случаях опережает прочие подходы к минимизации, включая и алгоритм Хопкрофта. В работе[1], сравнивающей оба алгоритма, показано, что алгоритм Бржозовского оказывается эффективнее алгоритма Хопкрофта для автоматов с большим числом переходов.
См. также
- Минимизация ДКА, алгоритм за O(n^2) с построением пар различимых состояний
 - Минимизация ДКА, алгоритм Хопкрофта (сложность O(n log n))