Мінімізація детермінованих скінчених автоматів

В подальшому при програмуванні скінчених автоматів важливо мати справу з так званими "мінімальними автоматами". Мінімальним для даного скінченого автомата візьмемо еквівалентний йому автомат з мінімальною кількістю станів. Те, що скінчені автомати можна мінімізувати покажемо на наступному прикладі:

Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru c q5

Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru a, c a, c

Мінімізація детермінованих скінчених автоматів - student2.ru q3 q4

Мінімізація детермінованих скінчених автоматів - student2.ru q0

a, b

Мінімізація детермінованих скінчених автоматів - student2.ru q2

Мал. 2.

Навіть при поверхневому аналізі діаграми переходів наведеного скінченого автомата видно, що вершини q3, q4 та q5 є "зайвими", тобто при їх вилученні новий автомат буде еквівалентний початковому. З наведеного вище прикладу видно, що для отриманого детермінованого скінченого автомата можна запропонувати еквівалентний йому автомат з меншою кількістю станів, тобто мінімізувати скінчений автомат. Очевидно що серед зайвих станів цього автомата є недосяжні та тупикові стани.

Означення. Стан q скінченого автомата М називається недосяжним, якщо на діаграмі переходів скінченого автомата не існує шляху з q0 в q.

Алгоритм.Пошук недосяжних станів. Спочатку спробуємо побудувати множину досяжних станів. Якщо Qm - множина досяжних станів скінченого автомата М, то Q\Qm - множина недосяжних станів. Побудуємо послідовність множин Q0, Q1, Q2, … таким чином, що:

П0. Q0 = { q0 }.

П1. Q1 = S0 È { q | q Î d(q0, a), для всіх а Î S }.

П2. Qi = Si-1 È { q | q Î d(qj, a), qj Î Qi-1 та для всіх а Î S }.

……………………….

Пm. Qm = Qm+1 = ……..

Очевидно, що кількість кроків П0, П1… скінчена, тому що послідовність Qi монотонна ( Q0 Í Q1 Í Q2 Í …. ) та обмежена зверху - |Qm| <= |Q|.

Тоді Qm – множина досяжних станів скінченого автомата, а Q\Qm – множина недосяжних станів.

Вилучимо з діаграми переходів скінченого автомата М недосяжні вершини. В новому (мінімізованому) автоматі функція d визначається лише для досяжних станів. Побудований нами скінчений автомат з меншою кількістю станів буде еквівалентний початковому.

Означення. Стан q скінченого автомата М називається тупиковим, якщо на діаграмі переходів скінченого автомата не існує шляху з q в F.

Алгоритм.Пошук тупикових станів. Спочатку спробуємо знайти нетупикові стани. Якщо Sm - множина нетупикових станів, то Q\Sm - множина тупикових станів. Побудуємо послідовність множин S0, S1, S2, … таким чином, що:

П0. S0 = { q | q Î F }.

П1. S1 = S0 È { q | d(q, a) Мінімізація детермінованих скінчених автоматів - student2.ru S0 Мінімізація детермінованих скінчених автоматів - student2.ru Æ , а Î S }.

П2. Si = Si-1 È { q | d(q, a) Мінімізація детермінованих скінчених автоматів - student2.ru Si-1 Мінімізація детермінованих скінчених автоматів - student2.ru Æ , а Î S }.

……………………….

Пм. Sm = Sm+1 = ……..

Очевидно, що кількість кроків П0, П1… скінчена, тому що послідовність Si монотонна ( S0 Í S1 Í S2 Í …. ) та обмежена зверху - |Sm| <= |Q|.

Тоді Sm – множина нетупикових станів скінченого автомата, а Q\Sm – множина тупикових станів. В новому (мінімізованому) автоматі функція d визначається лише для нетупикових станів.

В прикладі наведеному на Мал. 2 множина недосяжних станів - {q5}, а множина тупикових станів - {q3, q4}. Таким чином, для вище наведеного скінченого автомата еквівалентний йому автомат з меншою кількістю станів буде:

a, b

Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru

q0 q2

Мал. 3.

Автомат, у котрого відсутні недосяжні та тупикові стани, піддається подальшій мінімізації шляхом “склеювання” еквівалентних станів. Продемонструємо це на конкретному прикладі:

Мінімізація детермінованих скінчених автоматів - student2.ru a, c

Мінімізація детермінованих скінчених автоматів - student2.ru c

Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru b

Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru q1 q2

Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru c a, c

Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru q0 a

q3 q4

Мал. 4.

Очевидно, що для наведеного вище скінченого автомата можна побудувати еквівалентний йому скінчений автомат з меншою кількістю станів:

 
  Мінімізація детермінованих скінчених автоматів - student2.ru

Мінімізація детермінованих скінчених автоматів - student2.ru a, b c a, c

Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru Мінімізація детермінованих скінчених автоматів - student2.ru

q0 q1 q2

Мал. 5.

Ми досягли бажаного нам результату шляхом “склеювання” двох станів q1, q3. та q2, q4.

Означення. Два стани q1 та q2 скінченого автомата М називаються еквівалентними, якщо множини слів, які розпізнає автомат, починаючи з q1 та q2, співпадають.

Нехай q1 та q2 два різних стани скінченого автомата М, а х Î S*. Будемо говорити, що ланцюжок х розрізняє стани q1 та q2, якщо (q1,x) |=* (q3, e) та (q2,x) |=* (q4, e), причому один з станів q3 або q4 не належить множині заключних станів. Стани q1 та q2 називаються k – нерозрізнені, якщо не існує ланцюжка х (|x| <=k), що розрізняє стани q1 та q2. Два стани q1 та q2 нерозрізнені, якщо вони

к-нерозрізнені для довільного к.

Твердження: два стани q1 та q2 довільного скінченого автомата М з n станами нерозрізнені, якщо вони (n-2)-нерозрізнені.

Доведення: На першому кроці розіб’ємо множину станів скінченого автомата на дві підмножини: F та Q\F. На цій основі побудуємо відношення º0:

q1 º0 q2 , якщо обидва стани одночасно належать F або Q\F.

Побудуємо відношення ºк :

q1 ºк q2 , якщо q1 ºк-1 q2 та d( q1, а) ºк-1 d( q2, а) для всіх а Î S.

Очевидно, кожна побудована множина містить не більше (n-1) елементи. Таким чином, можна отримати не більше (n-2) уточнення відношення º0 .

Відношення ºn-2 визначає класи еквівалентних станів автомата М.

Алгоритм. Побудова мінімального скінченого автомата.

П1. Побудувати скінчений автомат без тупикових станів.

П2. Побудувати скінчений автомат без недосяжних станів.

П3. Знайти множини еквівалентних станів та побудувати найменший (мінімальний) автомат.

Ознайомившись з деякими результатами теорії скінчених автоматів, спробуємо уяснити, які мови (словарні множини) є скінченоавтоматними.

Твердження: Скінчено автоматними є наступні множини:

- порожня словарна множина - Æ;

- словарна множина, що складається з одного e-слова – {e};

- множина {a}, a Î S.

Доведення: в кожному випадку нам доведеться конструктивно побудувати відповідний скінчений автомат:

1. Довільний скінчений автомат з пустою множиною заключних станів (а мінімальний – з пустою множиною станів) допускає Æ;

2. Розглянемо автомат М =<{q0}, S, q0, d, {q0}>, у якому d не визначено ні для яких а Î S.

Тоді L(M) = {e}.

3. Розглянемо автомат М =<{q0, q1}, S, q0, d, {q1}>, у якому функція d визначена лише для пари (q0, a), а саме: d(q0, a) = q1.

Тоді L(M) = {a}.

Твердження: Якщо М1 = <Q1, S, q01, d1, F1> та М2 = <Q2, S, q02, d2, F2>, що визначають відповідно мови L(M1) та L(M2), то скінченоавтоматними мовами будуть:

- L(M1) È L(M2);

- L(M1) * L(M2);

- {L(M1)} = {e} È L(M1) È L(M1)* L(M1) È ….,

де:

L(M1) È L(M2) = { w | w Î L(M1) або w Î L(M2) },

L(M1) * L(M2) = {w=xy | x Î L(M1), y Î L(M2) }.

Доведення:

1. Побудуємо автомат М = <Q, S, q0, d, F>, такий що L(M) = L(M1) È L(M2).

- Q = Q1 È Q2 È {q0}, де q0 – новий стан (q0 Ï Q1 È Q2);

- Функцію d визначимо таким чином:

d(q,a) = d1(q,a), q Î Q1, а Î S;

d(q,a) = d2(q,a), q Î Q2, а Î S;

d(q0,a) = d1(q01,a) È d2(q02,a), q01 Î Q1, q02 Î Q2, а Î S;

- Множина заключних станів Мінімізація детермінованих скінчених автоматів - student2.ru

Побудований в цьому випадку автомат взагалі недетермінований. Індукцією по i >=1 покажемо, що (q0,w) |=i (q,e) можливо тоді і тільки тоді, коли (q01,w) |=i (q,e), q Î F1 або (q02,w) |=i (q,e), q Î F2.

2. Побудуємо автомат М = <Q, S, q0, d, F>, такий що L(M) = L(M1) * L(M2):

- Q = Q1 È Q2 ;

- q0 =q01;

- Функцію d визначимо таким чином:

d(q,a) = d1(q,a), q Î Q1\F1, а Î S;

d(q,a) = d2(q,a), q Î Q2, а Î S;

d(q,a) = d1(q,a) È d2(q02,a), q Î F1, q02 Î Q2,а Î S;

- Множина заключних станів Мінімізація детермінованих скінчених автоматів - student2.ru

3. Побудуємо автомат М = <Q, S, q0, d, F>, такий що L(M) = {L(M1)}:

- Q = Q1 È {q0}, де q0 – новий стан (q0 Ï Q1);

- Функцію d визначимо таким чином:

d(q,a) = d1(q,a), q Î Q1\F1, а Î S;

d(q0,a) = d1(q01,a) , q01 Î Q1, а Î S;

d(q,a) = d1(q,a) È d1(q01,a), q Î F1, а Î S;

- Множина заключних станів F = F1 È {q0}.

Наши рекомендации