✖

Минимизиране на автомат

Под минимизиране на автомат разбираме намирането на еквивалентен автомат, който съдържа минимално възможния брой състояния. Дори автомат, който не съдържа никакво излишно състояние, може да бъде опростен допълнително.

Пример

Да вземем този автомат:

Автоматът приема само думите 01 и 11. При това е очевидно, че съществува по-прост автомат с три състояния, който приема същия език. Състоянията q1 и q2 могат да се слеят в едно ново състояние {q1, q2} и преходите, които водеха към състоянията q1 или q2, ще водят към новото състояние, същото важи и за преходите, излизащи от q1 и q2. Получаваме този автомат:

Този автомат очевидно приема същия език като предишния, но има по-малко състояния.

Еквивалентност на състояния

Нека имаме автомата A = ⟨Q, Σ, δ, q0, F⟩. Определяме езика на състоянието q ∈ Q, който означаваме с L(q), като

L(q)=L(⟨Q,Σ,δ,q,F⟩)

Т.е. променяме началното състояние на автомата A от q0 на q и пресмятаме езика, приеман от този автомат. С други думи, в езика L(q) са всички думи w, такива че в автомата A от състоянието q с думата w стигаме до крайно състояние на автомата. Ако се върнем към предишния автомат, L(q1) = {1}.

Казваме, че две различни състояния q1 и q2 са еквивалентни, ако

L(q1)=L(q2)

Какво означава това? Ако състоянията q1, q2 са еквивалентни, то ако ги направим начални състояния на автомата, те ще пораждат един и същ език. С други думи: ако автоматът стигне до конфигурация ⟨q1, w⟩ и ⟨q2, w⟩, то трябва и в двата случая да приеме, или и в двата случая да отхвърли.

Ако се върнем към предишния автомат: състоянията q1 и q2 са еквивалентни, защото ако сме в състоянието q1, можем да приемем входната дума само ако непрочетената част от думата е равна на 1. Същото е, ако сме в състоянието q2.

При минимизирането на автомат целта е да намерим еквивалентните състояния и да ги премахнем, като ги слеем в едно ново състояние, както направихме в горния пример.

Как да намерим еквивалентните състояния

Кои състояния със сигурност няма да са еквивалентни? Ако вземем крайно и неприемащо състояние, те със сигурност няма да са еквивалентни, защото езикът на крайното състояние е различен от езика на неприемащото състояние — крайното състояние със сигурност приема думата ε, неприемащото — не. Метода веднага ще покажем на пример. Нека имаме този автомат:

Започваме, като създадем две множества от състояния

S1=F={q3,q6},S2=Q∖F={q0,q1,q2,q4,q5}.

Сега съставяме таблица на преходите и запазваме информацията за групите S1 и S2:

групасъстояние01S1q3q5q4q6——S2q0q1q2q1—q3q2—q3q4q6—q5q6—

Сега променяме таблицата така, че вместо да е записано директно в кои състояния отиваме за даден символ, записваме само групата, в която преминаваме. Например от състоянието q3 за 0 стигаме до състоянието q5, което е в групата S2. Вместо q5 записваме в таблицата S2:

групасъстояние01S1q3S2S2q6——S2q0S2S2q1—S1q2—S1q4S1—q5S1—

Сега разделяме двете групи допълнително. В една и съща група слагаме състоянията, които за всички символи преминават в едни и същи групи. Например състоянията q3 и q6 няма да са в една група, защото нито за 0, нито за 1 не отиват в една и съща група. Обратно, състоянията q1 и q2 ще са в една група, защото и двете състояния нямат преход за 0 и двете за 1 отиват в групата S1. Създаваме така нови групи:

групасъстояние01q3S2S2q6——q0S2S2q1—S1q2—S1q4S1—q5S1—

Във всяка група имаме еднакви преходи. Новообразуваните групи номерираме и отново определяме в коя от тези нови групи сочат състоянията:

групасъстояние01S1q3S5S5S2q6——S3q0S4S4S4q1—S1q2—S1S5q4S2—q5S2—

Сега трябва отново да разделим групите. Виждаме обаче, че вече не можем да извършим ново разделяне, бихме получили същите групи — защото състоянията q1 и q2 имат еднакви преходи по отношение на групите, но вече са в една група и никое друго състояние в групата S4 няма. Алгоритъмът за намиране на еквивалентни състояния е стигнал до края. От всяка група ни е достатъчно да изберем по едно състояние, останалите изтриваме и всички преходи, които са водели към изтритите състояния, ще водят към онова едно състояние, което сме избрали.

Можем например да оставим в новия автомат състоянията q3, q6, q0, q1, q4, а състоянията q2 и q5 да премахнем. Всички преходи, които са водели към q2, сега ще водят към q1, а всички преходи, които са водели към q5, ще водят към q4:

Стъпки при минимизиране на автомат

  1. Премахваме недостижимите състояния,
  2. премахваме излишните състояния,
  3. премахваме еквивалентните състояния.

Източници

Глави: Недостижими състояния, Излишни състояния, Минимизиране на автомат