Алгоритм Бржозовского — различия между версиями
Строка 58: | Строка 58: | ||
|statement= | |statement= | ||
Правый язык состояния <tex>q'</tex> <tex>d(\mathcal{A})</tex> эквивалентен объединению правых языков состояний <tex>q</tex> автомата <tex>\mathcal{A}</tex>, принадлежащих множеству <tex>q'</tex>. | Правый язык состояния <tex>q'</tex> <tex>d(\mathcal{A})</tex> эквивалентен объединению правых языков состояний <tex>q</tex> автомата <tex>\mathcal{A}</tex>, принадлежащих множеству <tex>q'</tex>. | ||
+ | }} | ||
+ | |||
+ | {{Определение | ||
+ | |definition= | ||
+ | '''Левое отношение''' регулярного языка <tex>L</tex> для слова <tex>u</tex> из <tex>\Sigma^{*}</tex> {{---}} язык <tex>u^{-1}L = \{ v \in X^{*} \mid uv \in L \}</tex>. | ||
}} | }} | ||
Строка 64: | Строка 69: | ||
* начальное состояние {{---}} <tex>L</tex>, | * начальное состояние {{---}} <tex>L</tex>, | ||
* терминальные состояния {{---}} множество отношений, содержащих пустое слово, | * терминальные состояния {{---}} множество отношений, содержащих пустое слово, | ||
− | * функция перехода <tex>\delta(u^{-1} | + | * функция перехода <tex>\delta(u^{-1}L, x) = (ux)^{-1}L</tex>. |
Автомат <tex>\mathcal{A}_L</tex> уникален с точностью до изоморфизма и имеет минимальное количество состояний. | Автомат <tex>\mathcal{A}_L</tex> уникален с точностью до изоморфизма и имеет минимальное количество состояний. | ||
Строка 70: | Строка 75: | ||
|about=5 | |about=5 | ||
|statement= | |statement= | ||
− | + | Детерминированный полный достижимый автомат минимален тогда и только тогда, когда правые языки его состояний различны. | |
}} | }} | ||
Строка 76: | Строка 81: | ||
===Описание=== | ===Описание=== | ||
Алгоритм минимизации конечных [[Детерминированные конечные автоматы|автоматов]] Бржозовского (Janusz A. (John) Brzozowski) выделяется, по крайней мере, следующими качествами: | Алгоритм минимизации конечных [[Детерминированные конечные автоматы|автоматов]] Бржозовского (Janusz A. (John) Brzozowski) выделяется, по крайней мере, следующими качествами: | ||
− | |||
* Он элегантен и весьма оригинален. | * Он элегантен и весьма оригинален. | ||
* Он эффективен. | * Он эффективен. | ||
* Он работает даже с [[Недетерминированные конечные автоматы|недетерминированными конечными автоматами]]. | * Он работает даже с [[Недетерминированные конечные автоматы|недетерминированными конечными автоматами]]. | ||
− | + | Пусть <tex>\mathcal{A}</tex> {{---}} конечный автомат. <tex>d(\mathcal{A})</tex> {{---}} детерминизированный автомат для <tex>\mathcal{A}</tex>, <tex>r(\mathcal{A})</tex> {{---}} обратный автомат для <tex>\mathcal{A}</tex>.<br> | |
+ | Обозначим <tex>d(r(\mathcal{A}))</tex> как <tex>dr(\mathcal{A})</tex>, <tex>r(d(r(\mathcal{A})))</tex> как <tex>rdr(\mathcal{A})</tex>, <tex>d(r(d(r(\mathcal{A}))))</tex> как <tex>drdr(\mathcal{A})</tex>. | ||
− | <tex> | + | {{Теорема |
− | + | |about=Бржозовский, 1962 | |
− | + | |statement= | |
− | + | Пусть <tex>\mathcal{A}</tex> {{---}} автомат (необязательно детерминированный), распознающий язык <tex>L</tex>. Минимальный детерминированный автомат <tex>\mathcal{A}_L</tex> может быть вычислен следующим образом: <tex>\mathcal{A}_L = drdr(\mathcal{A})</tex>. | |
− | + | |proof=По построению автомат drdr(A) конечный. Согласно утверждению 2, он распознает язык L. | |
− | |||
− | |||
− | |||
− | По построению автомат drdr(A) конечный. Согласно утверждению 2, он распознает язык L. | ||
Покажем, что правые языки drdr(A) все различны. Из утверждения 1, левые языки dr(A) попарно не пересекаются. Из утверждения 3, правые языки rdr(A) являются левыми языками dr(A). Таким образом, они попарно не пересекаются. Согласно утверждению 4, правый язык drdr(A) – объединение правых языков rdr(A). | Покажем, что правые языки drdr(A) все различны. Из утверждения 1, левые языки dr(A) попарно не пересекаются. Из утверждения 3, правые языки rdr(A) являются левыми языками dr(A). Таким образом, они попарно не пересекаются. Согласно утверждению 4, правый язык drdr(A) – объединение правых языков rdr(A). | ||
Поскольку правые языки rdr(A) попарно не пересекаются, все правые языки drdr(A) различны. Тогда, согласно утверждению 5 автомат drdr(A) минимальный. | Поскольку правые языки rdr(A) попарно не пересекаются, все правые языки drdr(A) различны. Тогда, согласно утверждению 5 автомат drdr(A) минимальный. | ||
+ | }} | ||
− | ==Пример работы== | + | ===Пример работы=== |
# Исходный [[Недетерминированные конечные автоматы|НКА]] (<tex>FA</tex>):<br>[[Файл:Fa.png|Исходный НКА]] | # Исходный [[Недетерминированные конечные автоматы|НКА]] (<tex>FA</tex>):<br>[[Файл:Fa.png|Исходный НКА]] | ||
# Первый шаг алгоритма (<tex>\operatorname{rev}(FA)</tex>):<br>[[Файл:Rfa.png|Первый шаг]] | # Первый шаг алгоритма (<tex>\operatorname{rev}(FA)</tex>):<br>[[Файл:Rfa.png|Первый шаг]] |
Версия 19:15, 29 октября 2016
Задача: |
Пусть дан автомат . Требуется построить автомат с наименьшим количеством состояний, распознающий тот же язык, что и . |
Содержание
Описание
Пусть
— состояние автомата .Определение: |
Правым языком (англ. right language) — называется язык | , принимаемый автоматом , полученным из путём добавления уникального начального состояния .
Определение: |
Левым языком (англ. left language) — называется язык | , принимаемый автоматом , полученным из путём добавления уникального терминального состояния .
Утверждение (1): |
Автомат является детерминированным тогда и только тогда, когда левые языки его состояний попарно не пересекаются. |
Определение: |
Обратное слово | для слова определяется следующим образом: и если , тогда , где .
Определение: |
Обратный язык для языка | — язык .
Определение: |
Обратный автомат для автомата | — автомат , полученный из сменой местами начальных и конечных состояний и сменой направлений переходов.
Утверждение (2): |
Если распознает язык , то распознает . |
Утверждение (3): |
Если левый язык состояния в — , тогда его левый язык в — . Аналогично для правого языка . |
Пусть НКА.
Тогда детерминированный автомат определяется следующим образом:
- Детерминированному состоянию соответствует множество недетерминированных состояний: для каждого имеем ,
- Начальное состояние в — множество из начальных состояний автомата ,
- Состояние в детерминированном автомате является терминальным тогда и только тогда, когда оно содержится хотя бы в одном недетерминированном состоянии,
- Пусть — состояние детерминированного автомата и – символ из . Если переход из по символу определен, тогда, по построению: .
Утверждение (4): |
Правый язык состояния эквивалентен объединению правых языков состояний автомата , принадлежащих множеству . |
Определение: |
Левое отношение регулярного языка | для слова из — язык .
Минимальный автомат для регулярного языка определяется следующим образом:
- множество состояний — это множество левых отношений языка ,
- начальное состояние — ,
- терминальные состояния — множество отношений, содержащих пустое слово,
- функция перехода .
Автомат
уникален с точностью до изоморфизма и имеет минимальное количество состояний.Утверждение (5): |
Детерминированный полный достижимый автомат минимален тогда и только тогда, когда правые языки его состояний различны. |
Алгоритм
Описание
Алгоритм минимизации конечных автоматов Бржозовского (Janusz A. (John) Brzozowski) выделяется, по крайней мере, следующими качествами:
- Он элегантен и весьма оригинален.
- Он эффективен.
- Он работает даже с недетерминированными конечными автоматами.
Пусть
Обозначим как , как , как .
Теорема (Бржозовский, 1962): |
Пусть — автомат (необязательно детерминированный), распознающий язык . Минимальный детерминированный автомат может быть вычислен следующим образом: . |
Доказательство: |
По построению автомат drdr(A) конечный. Согласно утверждению 2, он распознает язык L. Покажем, что правые языки drdr(A) все различны. Из утверждения 1, левые языки dr(A) попарно не пересекаются. Из утверждения 3, правые языки rdr(A) являются левыми языками dr(A). Таким образом, они попарно не пересекаются. Согласно утверждению 4, правый язык drdr(A) – объединение правых языков rdr(A). Поскольку правые языки rdr(A) попарно не пересекаются, все правые языки drdr(A) различны. Тогда, согласно утверждению 5 автомат drdr(A) минимальный. |
Пример работы
- Исходный НКА ( ):
- Первый шаг алгоритма (
- Второй шаг алгоритма (
переименовывает состояния, после этого всегда является начальным состоянием
): - Третий шаг алгоритма (
После выполнения этого шага алгоритма оба состояния и являются начальными.
): - Заключительный шаг алгоритма (
Заключение
Самым эффективным алгоритмом минимизации принято считать алгоритм Хопкрофта, который, как и прочие традиционные алгоритмы, работает только с ДКА. Его асимптотическое время выполнения зависит от логарифма исходных данных. С другой стороны очевидно, что алгоритм Бржозовского в худшем случае будет обладать экспоненциальным временем выполнения, ведь этого требует процедура детерминизации, выполняемая дважды. На практике же наблюдается парадокс, алгоритм Бржозовского во многих случаях опережает прочие подходы к минимизации, включая и алгоритм Хопкрофта. В работе[1], сравнивающей оба алгоритма, показано, что алгоритм Бржозовского оказывается эффективнее алгоритма Хопкрофта для автоматов с большим числом переходов.
См. также
- Минимизация ДКА, алгоритм за O(n^2) с построением пар различимых состояний
- Минимизация ДКА, алгоритм Хопкрофта (сложность O(n log n))