Преобразуване на НКА в ДКА
Ще покажем как да преобразуваме недетерминиран автомат в детерминиран автомат, с което ще докажем, че изчислителната мощ на недетерминираните и на детерминираните автомати е еквивалентна.
Основна идея
Нека имаме недетерминиран автомат ⟨QN, ΣN, δN, q0, FN⟩ без ε-преходи. Построяваме детерминиран автомат ⟨QD, ΣD, δD, p0, FD⟩ така, че
- QD ⊆ 2QN
- ΣD = ΣN
- p0 = {q0}
- FD = {Q ∈ QD | Q ∩ FN ≠ ∅}
Преходната функция δD определяме по следния начин:
Какво означава това? Недетерминираният автомат може да бъде едновременно в няколко състояния, така че например можем да стигнем до ситуация, в която нашият недетерминиран автомат е в състоянията {q0, q1}. С прочитането на следващ символ, например 1, можем да стигнем до множеството от състояния {q0, q2, q3}. В детерминираната версия на същия автомат това се изразява в това, че създаваме две състояния, наименуваме ги {q0, q1} и {q0, q2, q3} и въвеждаме между тях преход за символа 1. Формално така преминаваме от едно състояние в друго, но благодарение на наименованието ще знаем, че в недетерминирания автомат бихме се оказали в две, съответно в три състояния.
Пример
Нека имаме този недетерминиран автомат:
За да построим детерминирания автомат, трябва преди всичко да построим новата преходна функция. За това ще ни помогне таблица, в която записваме всички преходи. В началото таблицата изглежда така:
В лявата колона в края на алгоритъма ще имаме всички състояния на детерминирания автомат. Попълнената таблица след това ще определя преходната функция. Сега записваме в таблицата до кои състояния стигаме, ако сме в състоянието {q0} и на входа са символите 0 и 1.
От състоянието q0 за символа 0 води преход само към състоянието q1, а за символа 1 води към състоянията q1 и q2. Сега добавяме в таблицата две нови състояния: {q1} и {q1, q2}. Защо? Щом в таблицата попълним някакво множество от състояния, което още нямаме в лявата колона, добавяме това множество от състояния там.
и отново попълваме. При състоянието {q1, q2} не бива да забравяме да проверим и двете състояния, т.е. накъде стигаме от състоянието q1, обединено с това накъде стигаме от състоянието q2.
Получихме няколко нови състояния, които трябва да добавим в таблицата:
…и пак попълваме преходите:
Състоянията {q0, q1, q3}, {q1} и {q1,q2} вече са в таблицата, така че добавяме само състоянието {q0,q1,q2,q3}.
Не добавихме нито едно ново състояние, така че таблицата е попълнена. Остава само да съставим диаграмата. Състоянията на детерминирания автомат са в първата колона, преходите за символите 0 и 1 са в следващите. Всяко състояние, което съдържа някакво крайно състояние от първоначалния автомат, ще бъде крайно състояние и в този автомат. Т.е. всяко състояние, съдържащо q3, ще бъде крайно. Автоматът ще изглежда така:
Можем да покажем, че автоматът наистина работи правилно. Ще опитаме да приемем думата 11001. В детерминирания автомат ще вървим по пътя
и автоматът би приел думата, защото последното състояние {q0, q1, q2, q3} е крайно. В недетерминирания автомат по време на симулацията бихме стигнали до същите състояния, т.е. бихме започнали в състоянието q0 и за символа 1 бихме стигнали до състоянията {q1, q2}. Следващият символ 1 би ни довел до състоянията {q0,q3} и т.н. за останалите състояния. Накрая бихме се оказали във всички състояния {q0, q1, q2, q3} и автоматът би приел думата.
Източници
Глави: Краен автомат, Тотален автомат, Недетерминиран краен автомат, Симулация на недетерминиран автомат, Преобразуване на НКА в ДКА