✖

Преобразуване на НКА в ДКА

Ще покажем как да преобразуваме недетерминиран автомат в детерминиран автомат, с което ще докажем, че изчислителната мощ на недетерминираните и на детерминираните автомати е еквивалентна.

Основна идея

Нека имаме недетерминиран автомат ⟨QN, ΣN, δN, q0, FN⟩ без ε-преходи. Построяваме детерминиран автомат ⟨QD, ΣD, δD, p0, FD⟩ така, че

  • QD ⊆ 2QN
  • ΣD = ΣN
  • p0 = {q0}
  • FD = {Q ∈ QD | Q ∩ FN ≠ ∅}

Преходната функция δD определяме по следния начин:

∀Q∈QD,a∈ΣD:δD(Q,a)=⋃q∈QδN(q,a)

Какво означава това? Недетерминираният автомат може да бъде едновременно в няколко състояния, така че например можем да стигнем до ситуация, в която нашият недетерминиран автомат е в състоянията {q0, q1}. С прочитането на следващ символ, например 1, можем да стигнем до множеството от състояния {q0, q2, q3}. В детерминираната версия на същия автомат това се изразява в това, че създаваме две състояния, наименуваме ги {q0, q1} и {q0, q2, q3} и въвеждаме между тях преход за символа 1. Формално така преминаваме от едно състояние в друго, но благодарение на наименованието ще знаем, че в недетерминирания автомат бихме се оказали в две, съответно в три състояния.

Пример

Нека имаме този недетерминиран автомат:

За да построим детерминирания автомат, трябва преди всичко да построим новата преходна функция. За това ще ни помогне таблица, в която записваме всички преходи. В началото таблицата изглежда така:

състояние/символ01{q0}

В лявата колона в края на алгоритъма ще имаме всички състояния на детерминирания автомат. Попълнената таблица след това ще определя преходната функция. Сега записваме в таблицата до кои състояния стигаме, ако сме в състоянието {q0} и на входа са символите 0 и 1.

състояние/символ01{q0}{q1}{q1,q2}

От състоянието q0 за символа 0 води преход само към състоянието q1, а за символа 1 води към състоянията q1 и q2. Сега добавяме в таблицата две нови състояния: {q1} и {q1, q2}. Защо? Щом в таблицата попълним някакво множество от състояния, което още нямаме в лявата колона, добавяме това множество от състояния там.

състояние/символ01{q0}{q1}{q1,q2}{q1}{q1,q2}

и отново попълваме. При състоянието {q1, q2} не бива да забравяме да проверим и двете състояния, т.е. накъде стигаме от състоянието q1, обединено с това накъде стигаме от състоянието q2.

състояние/символ01{q0}{q1}{q1,q2}{q1}{q0,q1,q3}{q0,q3}{q1,q2}{q0,q1,q3}{q0,q3}

Получихме няколко нови състояния, които трябва да добавим в таблицата:

състояние/символ01{q0}{q1}{q1,q2}{q1}{q0,q1,q3}{q0,q3}{q1,q2}{q0,q1,q3}{q0,q3}{q0,q1,q3}{q0,q3}

…и пак попълваме преходите:

състояние/символ01{q0}{q1}{q1,q2}{q1}{q0,q1,q3}{q0,q3}{q1,q2}{q0,q1,q3}{q0,q3}{q0,q1,q3}{q0,q1,q3}{q0,q1,q2,q3}{q0,q3}{q1}{q1,q2}

Състоянията {q0, q1, q3}, {q1} и {q1,q2} вече са в таблицата, така че добавяме само състоянието {q0,q1,q2,q3}.

състояние/символ01{q0}{q1}{q1,q2}{q1}{q0,q1,q3}{q0,q3}{q1,q2}{q0,q1,q3}{q0,q3}{q0,q1,q3}{q0,q1,q3}{q0,q1,q2,q3}{q0,q3}{q1}{q1,q2}{q0,q1,q2,q3}{q0,q1,q3}{q0,q1,q2,q3}

Не добавихме нито едно ново състояние, така че таблицата е попълнена. Остава само да съставим диаграмата. Състоянията на детерминирания автомат са в първата колона, преходите за символите 0 и 1 са в следващите. Всяко състояние, което съдържа някакво крайно състояние от първоначалния автомат, ще бъде крайно състояние и в този автомат. Т.е. всяко състояние, съдържащо q3, ще бъде крайно. Автоматът ще изглежда така:

Можем да покажем, че автоматът наистина работи правилно. Ще опитаме да приемем думата 11001. В детерминирания автомат ще вървим по пътя

q0→1q1,q2→1q0,q3→0q1→0q0,q1,q3→1q0,q1,q2,q3

и автоматът би приел думата, защото последното състояние {q0, q1, q2, q3} е крайно. В недетерминирания автомат по време на симулацията бихме стигнали до същите състояния, т.е. бихме започнали в състоянието q0 и за символа 1 бихме стигнали до състоянията {q1, q2}. Следващият символ 1 би ни довел до състоянията {q0,q3} и т.н. за останалите състояния. Накрая бихме се оказали във всички състояния {q0, q1, q2, q3} и автоматът би приел думата.

Източници

Глави: Краен автомат, Тотален автомат, Недетерминиран краен автомат, Симулация на недетерминиран автомат, Преобразуване на НКА в ДКА