Алгоритм Бржозовского — различия между версиями
Строка 8: | Строка 8: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Правым языком''' (англ. ''right language'') | + | '''Правым языком''' (англ. ''right language'') называется язык <tex>L_d(q)</tex>, распознаваемый автоматом <tex>\mathcal{A}_{d}(q) = \langle \Sigma , Q , q , T , \delta \rangle</tex>, полученным из <tex>\mathcal{A}</tex> путём добавления уникального начального состояния <tex>q</tex>. |
}} | }} | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Левым языком''' (англ. ''left language'') | + | '''Левым языком''' (англ. ''left language'') называется язык <tex>L_g(q)</tex>, распознаваемый автоматом <tex>\mathcal{A}_{g}(q) = \langle \Sigma , Q , q , T , \delta \rangle</tex>, полученным из <tex>\mathcal{A}</tex> путём добавления уникального терминального состояния <tex>q</tex>. |
}} | }} | ||
Строка 62: | Строка 62: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Левое отношение''' регулярного языка <tex>L</tex> для слова <tex>u</tex> из <tex>\Sigma^{*}</tex> {{---}} язык <tex>u^{-1}L = \{ v \in X^{*} \mid uv \in L \}</tex>. | + | '''Левое отношение''' (англ. ''left quotient'') регулярного языка <tex>L</tex> для слова <tex>u</tex> из <tex>\Sigma^{*}</tex> {{---}} язык <tex>u^{-1}L = \{ v \in X^{*} \mid uv \in L \}</tex>. |
}} | }} | ||
Строка 92: | Строка 92: | ||
|statement= | |statement= | ||
Пусть <tex>\mathcal{A}</tex> {{---}} автомат (необязательно детерминированный), распознающий язык <tex>L</tex>. Минимальный детерминированный автомат <tex>\mathcal{A}_L</tex> может быть вычислен следующим образом: <tex>\mathcal{A}_L = drdr(\mathcal{A})</tex>. | Пусть <tex>\mathcal{A}</tex> {{---}} автомат (необязательно детерминированный), распознающий язык <tex>L</tex>. Минимальный детерминированный автомат <tex>\mathcal{A}_L</tex> может быть вычислен следующим образом: <tex>\mathcal{A}_L = drdr(\mathcal{A})</tex>. | ||
− | |proof=По построению автомат drdr(A) | + | |proof= |
− | Покажем, что правые языки drdr(A) | + | По построению автомат <tex>drdr(\mathcal{A})</tex> детерминированный. Согласно утверждению 2, он распознает язык <tex>L</tex>.<br> |
− | Поскольку правые языки rdr(A) попарно не пересекаются, все правые языки drdr(A) различны. | + | Покажем, что все правые языки <tex>drdr(\mathcal{A})</tex> различны. Из утверждения 1, левые языки <tex>dr(\mathcal{A})</tex> попарно не пересекаются. Из утверждения 3, правые языки <tex>rdr(\mathcal{A})</tex> являются левыми языками <tex>dr(\mathcal{A})</tex>. Таким образом, они попарно не пересекаются. Согласно утверждению 4, правый язык <tex>drdr(\mathcal{A})</tex> {{---}} объединение правых языков <tex>rdr(\mathcal{A})</tex>. |
+ | Поскольку правые языки <tex>rdr(\mathcal{A})</tex> попарно не пересекаются, все правые языки <tex>drdr(\mathcal{A})</tex> различны. | ||
+ | Так как все правые языки <tex>drdr(\mathcal{A})</tex> различны, согласно утверждению 5 автомат <tex>drdr(\mathcal{A})</tex> минимальный. | ||
}} | }} | ||
===Пример работы=== | ===Пример работы=== | ||
− | # Исходный [[Недетерминированные конечные автоматы|НКА]] | + | # Исходный [[Недетерминированные конечные автоматы|НКА]] <tex>\mathcal{A}</tex>:<br>[[Файл:Fa.png|Исходный НКА]] |
− | # Первый шаг | + | # Первый шаг, <tex>r(\mathcal{A})</tex>:<br>[[Файл:Rfa.png|Первый шаг]] |
− | # Второй шаг | + | # Второй шаг, <tex>dr(\mathcal{A})</tex>:<br>[[Файл:Drfa.png|Второй шаг]]<br>В детерминизированных автоматах состояния переименованы, так что <tex>0</tex> всегда является начальным состоянием. |
− | # Третий шаг | + | # Третий шаг, <tex>rdr(\mathcal{A})</tex>:<br>[[Файл:Rdrfa.png|Третий шаг]]<br>После выполнения этого шага алгоритма оба состояния <tex>2</tex> и <tex>3</tex> являются начальными. |
− | # Заключительный шаг | + | # Заключительный шаг, <tex>drdr(\mathcal{A})</tex>:<br>[[Файл:Drdrfa.png|Заключительный шаг]] |
== Заключение == | == Заключение == |
Версия 19:31, 29 октября 2016
Задача: |
Пусть дан автомат . Требуется построить автомат с наименьшим количеством состояний, распознающий тот же язык, что и . |
Содержание
Описание
Пусть
— состояние автомата .Определение: |
Правым языком (англ. right language) называется язык | , распознаваемый автоматом , полученным из путём добавления уникального начального состояния .
Определение: |
Левым языком (англ. left language) называется язык | , распознаваемый автоматом , полученным из путём добавления уникального терминального состояния .
Утверждение (1): |
Автомат является детерминированным тогда и только тогда, когда левые языки его состояний попарно не пересекаются. |
Определение: |
Обратное слово | для слова определяется следующим образом: и если , тогда , где .
Определение: |
Обратный язык для языка | — язык .
Определение: |
Обратный автомат для автомата | — автомат , полученный из сменой местами начальных и конечных состояний и сменой направлений переходов.
Утверждение (2): |
Если распознает язык , то распознает . |
Утверждение (3): |
Если левый язык состояния в — , тогда его левый язык в — . Аналогично для правого языка . |
Пусть НКА.
Тогда детерминированный автомат определяется следующим образом:
- Детерминированному состоянию соответствует множество недетерминированных состояний: для каждого имеем ,
- Начальное состояние в — множество из начальных состояний автомата ,
- Состояние в детерминированном автомате является терминальным тогда и только тогда, когда оно содержится хотя бы в одном недетерминированном состоянии,
- Пусть — состояние детерминированного автомата и – символ из . Если переход из по символу определен, тогда, по построению: .
Утверждение (4): |
Правый язык состояния эквивалентен объединению правых языков состояний автомата , принадлежащих множеству . |
Определение: |
Левое отношение (англ. left quotient) регулярного языка | для слова из — язык .
Минимальный автомат для регулярного языка определяется следующим образом:
- множество состояний — это множество левых отношений языка ,
- начальное состояние — ,
- терминальные состояния — множество отношений, содержащих пустое слово,
- функция перехода .
Автомат
уникален с точностью до изоморфизма и имеет минимальное количество состояний.Утверждение (5): |
Детерминированный полный достижимый автомат минимален тогда и только тогда, когда правые языки его состояний различны. |
Алгоритм
Описание
Алгоритм минимизации конечных автоматов Бржозовского (Janusz A. (John) Brzozowski) выделяется, по крайней мере, следующими качествами:
- Он элегантен и весьма оригинален.
- Он эффективен.
- Он работает даже с недетерминированными конечными автоматами.
Пусть
Обозначим как , как , как .
Теорема (Бржозовский, 1962): |
Пусть — автомат (необязательно детерминированный), распознающий язык . Минимальный детерминированный автомат может быть вычислен следующим образом: . |
Доказательство: |
По построению автомат |
Пример работы
- Исходный НКА :
- Первый шаг,
- Второй шаг,
В детерминизированных автоматах состояния переименованы, так что всегда является начальным состоянием.
: - Третий шаг,
После выполнения этого шага алгоритма оба состояния и являются начальными.
: - Заключительный шаг,
Заключение
Самым эффективным алгоритмом минимизации принято считать алгоритм Хопкрофта, который, как и прочие традиционные алгоритмы, работает только с ДКА. Его асимптотическое время выполнения зависит от логарифма исходных данных. С другой стороны очевидно, что алгоритм Бржозовского в худшем случае будет обладать экспоненциальным временем выполнения, ведь этого требует процедура детерминизации, выполняемая дважды. На практике же наблюдается парадокс, алгоритм Бржозовского во многих случаях опережает прочие подходы к минимизации, включая и алгоритм Хопкрофта. В работе[1], сравнивающей оба алгоритма, показано, что алгоритм Бржозовского оказывается эффективнее алгоритма Хопкрофта для автоматов с большим числом переходов.
См. также
- Минимизация ДКА, алгоритм за O(n^2) с построением пар различимых состояний
- Минимизация ДКА, алгоритм Хопкрофта (сложность O(n log n))