WikiDer > Минимизация DFA

DFA minimization
Пример DFA. Если в состоянии c, он демонстрирует то же поведение для каждой входной строки, что и в состоянии d, или в состоянии е. Точно так же говорится а и б неотличимы. В DFA нет недоступных состояний.
Эквивалентный минимальный DFA. Неразличимые состояния объединены в одно.

В теория автоматов (филиал теоретическая информатика), Минимизация DFA это задача преобразования данного детерминированный конечный автомат (DFA) в эквивалентный DFA с минимальным количеством состояний. Здесь два DFA называются эквивалентными, если они распознают одинаковые обычный язык. Известно несколько различных алгоритмов, решающих эту задачу, которые описаны в стандартных учебниках по теории автоматов.[1]

Минимальный DFA

Для каждого регулярного языка также существует минимальный автомат который принимает его, то есть DFA с минимальным количеством состояний, и этот DFA уникален (за исключением того, что состояниям можно давать разные имена).[2][3] Минимальный DFA обеспечивает минимальные вычислительные затраты для таких задач, как сопоставление с образцом.

Есть два класса состояний, которые можно удалить или объединить из исходного DFA, не влияя на язык, который он принимает для его минимизации.

  • Недостижимые состояния являются состояниями, которые недостижимы из начального состояния DFA для любой входной строки.
  • Неотличимые состояния - это те, которые нельзя отличить друг от друга ни для одной входной строки.

Минимизация DFA обычно выполняется в три этапа, соответствующих удалению или слиянию соответствующих состояний. Поскольку устранение неотличимых состояний является наиболее затратным с точки зрения вычислений, обычно это делается в последнюю очередь.

Недостижимые состояния

Штат п детерминированного конечного автомата M =(Q, Σ, δ, q0, F) недоступен, если нет строки ш в Σ* существует для которого p =δ*(q0, ш). В этом определении Q - это набор состояний, Σ - это набор входных символов, δ - функция перехода (отображение состояния и входного символа в набор состояний), δ*является его расширением до строк, q0 - начальное состояние, а F - это набор принимающих (также называемых конечных) состояний. Достижимые состояния можно получить по следующему алгоритму:

позволять reachable_states := {q0};позволять new_states := {q0};делать {    темп := то пустой набор;    за каждый q в new_states делать        за каждый c в Σ делать            темп := темп  {п такой который п = δ(q,c)};        конец;    конец;    new_states := темп \ reachable_states;    reachable_states := reachable_states  new_states;} пока (new_states  то пустой набор);unreachable_states := Q \ reachable_states;

Недостижимые состояния могут быть удалены из DFA, не влияя на поддерживаемый язык.

Неотличимые состояния

Алгоритм Хопкрофта

Один алгоритм для слияния неотличимых состояний DFA, благодаря Хопкрофт (1971), основан на уточнение раздела, разбивая состояния DFA на группы по их поведению. Эти группы представляют классы эквивалентности из Отношение эквивалентности Майхилла – Нероде, при этом каждые два состояния одного и того же раздела эквивалентны, если они имеют одинаковое поведение для всех входных последовательностей. То есть для каждых двух состояний п1 и п2 принадлежащие к одному и тому же классу эквивалентности внутри раздела п, и каждое входное слово ш, переходы, определяемые ш всегда должен принимать состояния п1 и п2 в равные состояния, заявляет, что оба принимают, или заявляет, что оба отклоняют. Это не должно быть возможным для ш принять п1 в принимающее состояние и п2 в состояние отказа или наоборот.

Следующее псевдокод описывает алгоритм:

п := {F, Q \ F};W := {F, Q \ F};пока (W является нет пустой) делать     выберите и удалять а набор А из W     за каждый c в Σ делать          позволять Икс быть то набор из состояния за который а переход на c ведет к а государственный в А          за каждый набор Y в п за который Икс  Y является непустой и Y \ Икс является непустой делать               заменять Y в п к то два наборы Икс  Y и Y \ Икс               если Y является в W                    заменять Y в W к то одно и тоже два наборы               еще                    если |Икс  Y| <= |Y \ Икс|                         Добавить Икс  Y к W                    еще                         Добавить Y \ Икс к W          конец;     конец;конец;

Алгоритм начинается с слишком грубого разбиения: каждая пара состояний, эквивалентных согласно соотношению Майхилла – Нероде, принадлежит одному и тому же набору в разбиении, но неэквивалентные пары также могут принадлежать одному и тому же набору. Он постепенно уточняет разбиение на большее количество более мелких наборов, на каждом шаге разбивая наборы состояний на пары подмножеств, которые обязательно неэквивалентны. Начальное разбиение - это разделение состояний на два подмножества состояний, которые явно не имеют одинаковых поведение друг друга: принимающие состояния и отвергающие состояния. Затем алгоритм повторно выбирает набор А из текущего раздела и входного символа c, и разбивает каждый из наборов разбиения на два (возможно, пустые) подмножества: подмножество состояний, которые приводят к А на входном символе c, и подмножество состояний, не приводящих к А. С А уже известно, что их поведение отличается от поведения других наборов раздела, подмножества, которые приводят к А также имеют поведение, отличное от поведения подмножеств, которое не приводит к А. Когда больше не удается найти разбиения этого типа, алгоритм завершается.

Лемма. Учитывая фиксированный символ c и класс эквивалентности Y, который разбивается на классы эквивалентности B и C, только один из B или C необходим для уточнения всего разбиения.[4]

Пример: предположим, что у нас есть класс эквивалентности Y, который разбивается на классы эквивалентности B и C. Предположим, у нас также есть классы D, E и F; D и E имеют состояния с переходами в B на символе c, в то время как F имеет переходы в C на символе c. По лемме мы можем выбрать либо B, либо C в качестве отличителя, скажем B. Тогда состояния D и E разделяются их переходами в B. Но F, который не указывает на B, просто не разделяется во время текущей итерации алгоритма; он будет уточнен другим отличителем (ами).

Наблюдение. Все B или C необходимы для правильного разделения ссылающихся классов, таких как D, E и F - подмножества не подходят.

Цель самого внешнего если утверждение (если Y находится в W) состоит в том, чтобы заделать W, набор отличительных признаков. В предыдущем утверждении алгоритма мы видим, что Y только что разделен. Если Y находится в W, он просто устарел как средство разделения классов в будущих итерациях. Таким образом, Y необходимо заменить обоими расщеплениями из-за наблюдения выше. Однако, если Y не входит в W, только одно из двух разбиений, а не оба, необходимо добавить к W из-за леммы выше. Выбор меньшего из двух разбиений гарантирует, что новое добавление к W будет не больше половины размера Y; это ядро ​​алгоритма Хопкрофта: как он получает свою скорость, как объясняется в следующем абзаце.

В худший случай время работы этого алгоритма О(нс бревно п), куда п количество состояний и s это размер алфавита. Эта оценка следует из того, что для каждого из нс переходов автомата, множества, взятые из Q которые содержат целевое состояние перехода, имеют размеры, которые уменьшаются друг относительно друга в два или более раз, поэтому каждый переход участвует в О(бревно п) шагов разбиения в алгоритме. В уточнение раздела Структура данных позволяет выполнять каждый шаг разделения во времени, пропорциональном количеству переходов, которые в нем участвуют.[5] Это остается наиболее эффективным известным алгоритмом решения проблемы, и для определенных распределений входных данных его средняя сложность даже лучше, О(п журнал журнал п).[6]

После того, как алгоритм Хопкрофта был использован для группировки состояний входного DFA в классы эквивалентности, минимальный DFA может быть построен путем формирования одного состояния для каждого класса эквивалентности. Если S это набор состояний в п, s это государство в S, и c является входным символом, то переход в минимальном DFA из состояния для S, на входе c, переходит в набор, содержащий состояние, в которое входной автомат перейдет из состояния s на входе c. Начальное состояние минимального DFA - это состояние, содержащее начальное состояние входного DFA, а принимающие состояния минимального DFA - это те, члены которых принимают состояния входного DFA.

Алгоритм Мура

Алгоритм Мура для минимизации DFA обусловлен Эдвард Ф. Мур (1956). Подобно алгоритму Хопкрофта, он поддерживает раздел, который начинается с отделения состояний принятия от состояний отклонения, и многократно уточняет раздел до тех пор, пока больше не удастся выполнить уточнения. На каждом шаге он заменяет текущий раздел на грубейшее обычное уточнение из s + 1 разделов, один из которых является текущим, а остальные - прообразами текущего раздела при функциях перехода для каждого из входных символов. Алгоритм завершается, когда эта замена не меняет текущий раздел. Его временная сложность наихудшего случая равна О(п2s): каждый шаг алгоритма можно выполнить во времени О(нс) используя вариант радиальная сортировка переупорядочить состояния таким образом, чтобы состояния в одном наборе нового раздела были последовательными в упорядочении, и было не более п шагов, поскольку каждое, кроме последнего, увеличивает количество наборов в разделе. Примеры проблемы минимизации DFA, которые вызывают наихудшее поведение, такие же, как и для алгоритма Хопкрофта. Количество шагов, которые выполняет алгоритм, может быть намного меньше, чем п, поэтому в среднем (при постоянном s) его производительность О(п бревно п) или даже О(п журнал журнал п) в зависимости от случайного распределения на автоматах, выбранных для моделирования поведения алгоритма в среднем случае.[6][7]

Алгоритм Бжозовского

В качестве Бжозовский (1963) наблюдается, изменение краев DFA дает недетерминированный конечный автомат (NFA) для обращения к исходному языку и преобразования этого NFA в DFA с использованием стандартного конструкция электростанции (построение только достижимых состояний преобразованного DFA) приводит к минимальному DFA для того же обратного языка. Повторение этой операции разворота во второй раз дает минимальный DFA для исходного языка. Наихудшая сложность алгоритма Бжозовского является экспоненциальной, так как существуют регулярные языки, для которых минимальный DFA обращения экспоненциально больше, чем минимальный DFA языка,[8] но часто он работает лучше, чем можно было бы предположить в этом наихудшем случае.[6]

Минимизация NFA

Хотя описанные выше процедуры работают для DFA, метод разделения не работает для недетерминированные конечные автоматы (NFAs).[9] Хотя исчерпывающий поиск может минимизировать NFA, не существует алгоритма полиномиального времени для минимизации общих NFA, если только п=PSPACE, нерешенная гипотеза в теория сложности вычислений что широко считается ложным. Однако есть способы Минимизация NFA это может быть более эффективным, чем поиск методом перебора.[10]

Смотрите также

Примечания

  1. ^ Хопкрофт, Мотвани и Ульман (2001), Раздел 4.4.3, «Минимизация DFA».
  2. ^ Хопкрофт и Ульман (1979), Раздел 3.4, теорема 3.10, стр.67.
  3. ^ Хопкрофт, Мотвани и Ульман (2001), Раздел 4.4.3, «Минимизация DFA», с. 159, и стр. 164 (замечание после теоремы 4.26)
  4. ^ На основании следствия 10 из Кнуутила (2001)
  5. ^ Хопкрофт (1971); Ахо, Хопкрофт и Ульман (1974)
  6. ^ а б c Berstel et al. (2010).
  7. ^ Дэвид (2012).
  8. ^ Например, язык двоичных строк, п-й символ требует только п + 1 состояний, но его обращение требует 2п состояния. Лейсс (1981) предоставляет тройной п-состояние DFA, для отмены которого требуется 2п говорится, максимально возможное. Дополнительные примеры и наблюдение связи между этими примерами и анализом наихудшего случая алгоритма Бжозовского см. Кампеану и др. (2001).
  9. ^ Хопкрофт, Мотвани и Ульман (2001), Раздел 4.4, рисунок «Минимизация состояний NFA», стр. 163.
  10. ^ Камеда и Вайнер (1970).

Рекомендации

  • Ахо, Альфред В.; Хопкрофт, Джон Э.; Ульман, Джеффри Д. (1974), «4.13 Разделение», Разработка и анализ компьютерных алгоритмов, Addison-Wesley, стр. 157–162..
  • Берстель, Жан; Боассон, Люк; Картон, Оливье; Фагно, Изабель (2010), «Минимизация автоматов», Автоматы: от математики к приложениям, Европейское математическое общество, arXiv:1010.5318, Bibcode:2010arXiv1010.5318B
  • Бжозовский, Ю.А. (1963), «Канонические регулярные выражения и минимальные графы состояний для определенных событий», Proc. Симпозиумы. Математика. Теория автоматов (Нью-Йорк, 1962), Политехническая пресса Политехнического института. of Brooklyn, Brooklyn, N.Y., стр. 529–561, МИСТЕР 0175719.
  • Кампеану, Цезарь; Кулик, Карел, II; Саломаа, Кай; Ю, Шэн (2001), "Сложность состояний основных операций на конечных языках", 4-й Международный семинар по внедрению автоматов (WIA '99), Конспект лекций по информатике, 2214, Springer-Verlag, стр. 60–70, Дои:10.1007/3-540-45526-4_6, ISBN 978-3-540-42812-1.
  • Дэвид, Жюльен (2012), «Средняя сложность алгоритмов Мура и Хопкрофта», Теоретическая информатика, 417: 50–65, Дои:10.1016 / j.tcs.2011.10.011.
  • Хопкрофт, Джон (1971), "An п бревно п алгоритм минимизации состояний в конечном автомате », Теория машин и вычислений (Proc. Internat. Sympos., Technion, Haifa, 1971), Нью-Йорк: Academic Press, стр. 189–196, МИСТЕР 0403320. См. Также предварительную версию, Технический отчет STAN-CS-71-190, Стэнфордский университет, факультет компьютерных наук, январь 1971 г.
  • Хопкрофт, Джон Э .; Ульман, Джеффри Д. (1979), Введение в теорию автоматов, языки и вычисления, Ридинг / MA: Эддисон-Уэсли, ISBN 978-0-201-02988-8
  • Хопкрофт, Джон Э.; Мотвани, Раджив; Ульман, Джеффри Д. (2001), Введение в теорию автоматов, языки и вычисления (2-е изд.), Эддисон-Уэсли.
  • Камеда, Цунехико; Вайнер, Питер (1970), "О минимизации состояния недетерминированных конечных автоматов", Транзакции IEEE на компьютерах, 100 (7): 617–627, Дои:10.1109 / T-C.1970.222994.
  • Knuutila, Timo (2001), "Повторное описание алгоритма Хопкрофтом", Теоретическая информатика, 250 (1–2): 333–363, Дои:10.1016 / S0304-3975 (99) 00150-4, МИСТЕР 1795249.
  • Лейсс, Эрнст (1981), "Краткое представление регулярных языков булевыми автоматами", Теоретическая информатика, 13 (3): 323–330, Дои:10.1016 / S0304-3975 (81) 80005-9, МИСТЕР 0603263.
  • Лейсс, Эрнст (1985), "Краткое представление регулярных языков булевыми автоматами II", Теоретическая информатика, 38: 133–136, Дои:10.1016/0304-3975(85)90215-4
  • Мур, Эдвард Ф. (1956), «Геданкен-эксперименты на последовательных машинах», Исследования автоматов, Анналы математических исследований, вып. 34, Princeton, N.J .: Princeton University Press, стр. 129–153, МИСТЕР 0078059.
  • Сакарович, Жак (2009), Элементы теории автоматов, Перевод с французского Рубена Томаса, Издательство Кембриджского университета, ISBN 978-0-521-84425-3, Zbl 1188.68177

внешняя ссылка