Jump to content

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

Пример ДФА. Если в штате , он демонстрирует такое же поведение для каждой входной строки, как и в состоянии , или в штате . Аналогично, говорится и неразличимы. У DFA нет недоступных состояний.
Эквивалент минимального DFA. Неразличимые государства были объединены в одно.

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

Минимальный DFA [ править ]

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

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

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

Минимизация DFA обычно выполняется в три этапа:

  1. удалить мертвые и недоступные состояния (это ускорит следующий шаг),
  2. объединить неразличимые состояния,
  3. при необходимости воссоздайте одно мертвое состояние («состояние приемника»), если результирующий DFA должен быть завершен.

Недостижимые состояния [ править ]

Государство детерминированного конечного автомата недоступен, если нет строки в существует, для чего . В этом определении это набор состояний, — набор входных символов, — функция перехода (сопоставление состояния и входного символа с набором состояний), это его расширение на строки (также известное как расширенная функция перехода), является начальным состоянием, а — это набор принимающих (также известных как конечные) состояний. Достижимые состояния можно получить с помощью следующего алгоритма:

let reachable_states := {q0}
let new_states := {q0}

do {
    temp := the empty set
    for each q in new_states do
        for each c in Σ do
            temp := temp  {p such that p = δ(q,c)}
    new_states := temp \ reachable_states
    reachable_states := reachable_states  new_states
} while (new_states  the empty set)

unreachable_states := Q \ reachable_states

Предполагая эффективную реализацию наборов состояний (например, new_states) и операции над ними (например, добавление состояния или проверка его присутствия), этот алгоритм можно реализовать с временной сложностью , где количество штатов и – число переходов входного автомата.

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

Неразличимые состояния [ править ]

Следующие алгоритмы представляют различные подходы к объединению неразличимых состояний.

Алгоритм Хопкрофта [ править ]

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

Следующий псевдокод описывает форму алгоритма, заданную Сюй. [4] Также были представлены альтернативные формы. [5] [6]

P := {F, Q \ F}
W := {F, Q \ F}

while (W is not empty) do
    choose and remove a set A from W
    for each c in Σ do
        let X be the set of states for which a transition on c leads to a state in A
        for each set Y in P for which X  Y is nonempty and Y \ X is nonempty do
            replace Y in P by the two sets X  Y and Y \ X
            if Y is in W
                replace Y in W by the same two sets
            else
                if |X  Y| <= |Y \ X|
                    add X  Y to W
                else
                    add Y \ X to W

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

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

что у нас есть класс эквивалентности 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 — подмножества не подойдут.

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

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

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

Алгоритм Мура [ править ]

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

Алгоритм Бжозовского [ править ]

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

Интуиция алгоритма такова: определение обратного автомата объединяет состояния, которые неразличимы в исходном автомате, но могут объединять и состояния, которые не должны объединяться (т. е. не объединяются в минимальном DFA). В таком случае, после того как мы перевернем автомат во второй раз, он может оказаться не детерминированным. Поэтому нам нужно определить его еще раз, получив минимальный ДКА.

Доказательство правильности [ править ]

После того, как мы определим чтобы получить , мы отменяем это чтобы получить . Сейчас распознает тот же язык, что и , но есть одно важное отличие: в из которого мы можем принять одно и то же слово. Это следует из быть детерминистическим, т.е. в стране нет двух государств которого мы можем достичь из исходного состояния посредством одного и того же слова. Определение затем создает powerstates (наборы состояний ), где каждые два состояния власти различаются ‒ естественно ‒ хотя бы в одном состоянии из . Предполагать и ; затем вносит хотя бы одно слово [примечание 2] на язык , [примечание 3] которого не может быть в , поскольку это слово уникально для (ни одно другое государство это не принимает). Мы видим, что это справедливо для каждой пары мощных состояний, и, таким образом, каждое энергетическое состояние отличается от любого другого энергетического состояния. Поэтому после определения , у нас есть DFA без неразличимых или недостижимых состояний; следовательно, минимальный ДКА для оригинала .

Если уже детерминирован, то его достаточно обрезать, [примечание 4] переверните его, определите его, а затем снова переверните. Это можно было бы рассматривать как начало с в описанном выше процессе (при условии, что он уже был обрезан), поскольку входной FA уже детерминирован (но имейте в виду, что на самом деле это не разворот). Мы обращаем и определяем чтобы получить , который является минимальным ДКА для обращения языка (поскольку мы пока сделали только один разворот). Теперь все, что осталось сделать, это повернуть вспять чтобы получить минимальный DFA для исходного языка.

Сложность [ править ]

В худшем случае сложность алгоритма Бжозовского экспоненциально зависит от числа состояний входного автомата. Это справедливо независимо от того, являются ли входные данные NFA или DFA. В случае DFA экспоненциальный взрыв может произойти во время определения обращения входного автомата; [примечание 5] в случае NFA это может произойти и при первоначальном определении входного автомата. [примечание 6] Однако алгоритм часто работает лучше, чем можно было бы предположить в этом худшем случае. [6]

Минимизация NFA [ править ]

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

См. также [ править ]

Примечания [ править ]

  1. ^ Хопкрофт, Мотвани и Ульман (2001) , Раздел 4.4.3, «Минимизация DFA».
  2. ^ Хопкрофт и Ульман (1979) , раздел 3.4, теорема 3.10, стр.67
  3. ^ Хопкрофт, Мотвани и Уллман (2001) , Раздел 4.4.3, «Минимизация DFA», стр. 159 и с. 164 (замечание после теоремы 4.26)
  4. ^ Сюй, Инцзе (2009). «Описание алгоритма n log n для минимизации состояний в детерминированном конечном автомате». п. 5. S2CID   14461400 . {{cite web}}: Отсутствует или пусто |url= ( помощь )
  5. ^ Кнуутила (2001)
  6. ^ Jump up to: Перейти обратно: а б с д Берстель и др. (2010) .
  7. ^ На основе следствия 10 Кнуутилы (2001).
  8. ^ Хопкрофт (1971) ; Ахо, Хопкрофт и Уллман (1974)
  9. ^ Дэвид (2012) .
  10. ^ Хопкрофт, Мотвани и Уллман (2001) , раздел 4.4, рисунок с надписью «Минимизация состояний NFA», стр. 163.
  11. ^ Камеда и Вайнер (1970) .
  1. ^ имеется несколько конечных состояний В случае, если в M , мы либо должны разрешить несколько начальных состояний при обращении M ; или ко всем исходным состояниям добавить дополнительное состояние с ε-переходами и сделать начальным только это новое состояние.
  2. ^ нет мертвых состояний Напомним, что в M ' ; таким образом, от каждого штата принимается хотя бы одно слово.
  3. ^ Язык штата — это набор слов, принятых из этого штата.
  4. ^ Обрезать = удалить недоступные и мертвые состояния.
  5. ^ Например, язык двоичных строк, n- й символ которого равен единице, требует только n + 1 состояний, а для его обращения требуется 2 н государства. Лейсс (1981) предлагает троичный ДКА с n -состояниями, для обращения которого требуется 2 н говорится, максимально возможное. Дополнительные примеры и наблюдение связи между этими примерами и анализом алгоритма Бжозовского наихудшего случая см. в Câmpeanu et al. (2001) .
  6. ^ Экспоненциальный взрыв произойдет не чаще одного раза, а не в обеих детерминизациях. То есть алгоритм в худшем случае экспоненциальный, а не двукратно-экспоненциальный.

Ссылки [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: a192217dc7f5637e6d2d3db3c683fadf__1717599300
URL1:https://arc.ask3.ru/arc/aa/a1/df/a192217dc7f5637e6d2d3db3c683fadf.html
Заголовок, (Title) документа по адресу, URL1:
DFA minimization - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)