Пређи на садржај

ДКА минимизација

С Википедије, слободне енциклопедије

Под ДКА минимизацијом се подразумева налажење детерминистичког коначног аутомата (ДКА) са најмањим бројем стања који препознаје исти регуларан језик као и задати ДКА.[1] Показује се да је овај аутомат јединствен до на изоморфизам! Наиме, за два ДКА и кажемо да су изоморфни уколико постоји бијекција тако да је задовољено :

Неформално говорећи, ово заправо значи да ако имамо исцртан мултиграф којим је представљен аутомат , можемо преименовати стања тог графа (остављајући гране нетакнутим и не уводећи нова почетна нити завршна стања ) тако да се добије мултиграф аутомата . Дакле при минимизацији не можемо добити суштински различите аутомате и тиме се решава питање јединствености. У даљем излагању користићемо местимично и проиширену функцију прелаза
где , која се дефинише овако:

  • када
  • где је нека реч: и

У наредним секцијама биће изложен скелет теорије која се тиче минималног аутомата, а затим ће бити изложено неколико алгоритама за конструкцију МДКА уз детаљна објашњења.

Минимални аутомат преко левих количника[уреди | уреди извор]

Нека је дат ДКА који препознаје језик , тј.
Претпоставићемо да овај аутомат нема недоступних стања, јер у супротном елиминацијом комплетног подграфа који је индукован недоступним стањима аутомата добијамо опет ДКА, који је еквивалентан полазном, а има мање стања. Ова претпоставка дакле не умањује општост.

  1. За дефинишемо где (Леви количник скупа по речи )
  2. Дефинишемо и за свако :

Ако означимо може се показати да је , што заправо повлачи да је коначан и да је
(*)
Сада можемо да конструишемо ДКА на следећи начин:

Лако се може показати индукцијом по дужини речи да је добро дефинисана функција и да је , а одатле следи , а то није све, на основу (*) закључујемо да је овај аутомат заправо ДКА са минималним бројем стања који је еквивалентан са , у смислу да не постоји ниједан други аутомат са тим својством који има мање стања.

Количнички аутомат и Неродова еквиваленција[уреди | уреди извор]

Нека је ДКА у коме су сва стања доступна. Увешћемо ознаку ради краћег записа. Неородова релација еквиваленције над
се дефинише на следећи начин:

За два стања која су у у овој релацији кажемо да су неразликујућа, у супротном она су разликујућа. Једно важно својство Неродове релације која се експлоатише у неким алгоритмима минимизације ДКА јесте десна инваријантност тј.

  • .

Обележићемо са релацију еквиваленције елемента , количнички скуп са .

  • Количнички аутомат над је ДКА

за који важи:.
Може се доказати свака класа Неродове еквиваленције садржи или само завршна, или само незавршна стања, као и да је овај (количнички) аутомат еквивалентан полазном. Количнички аутомат над аутоматом има исто толико стања као и минимални аутомат описан у претходној секцији што значи да је он такође један минимални аутомат за . Са друга стране, може се показати да уколико је Неродова релација у ствари једнакост над неким ДКА , онда је тај аутомат изоморфан са минималним аутоматом описаним у претходној секцији. Коначни закључак је да су свака два минимална аутомата за задати ДКА међусобно изоморфна, што значи да је при минимизацији довољно одредити само један, а обично је то управо количнички аутомат.

Хопкрофтов алгоритам минимизације[уреди | уреди извор]

Овај алгоритам као и многи други алгоритми минимизације се своди на одређивање количничког аутомата за неки ДКА , односно одређивање класа еквиваленције Неродове релације. Идеја Хопкрофтовог алгоритма, је да најпре кренемо од неког партиционисања скупа стања , тако да је свака партиција у ствари унија класа еквиваленција Неродове релације. (*)
Пошто свако партиционисање скупа одређује једну релацију еквиваленције и обрнуто ( два елемента су у тој релацији акко су у истој партицији) овај услов би могао да се искаже другачије, тј. можемо да кажемо да у ствари желимо да кренемо од неке друге релације еквиваленције, за коју знамо да је надскуп Неродове релације, јер то значи да је количнички скуп те релације у ствари једно партиционисање скупа стања, и свака класа те релације је ништа друго него унија неких Неродових класа еквиваленције. Дакле, најпре дефинишемо неко партиционисање (релацију) које задовољава овај услов, (а оно представља грубу апроксимацију Неродове релације), а затим корак по корак долазимо до све финијих партиција тј. до бољих апроксимација, све док не добијемо количнички скуп за Неродову релацију еквиваленције, у случају овог алгоритма видећемо да је то када не будемо више могли да „произведемо” нове партиције. Дакле услов (*) се пропагира у сваком кораку алгоритма. Пре самог псеудокода, пар разјашњења и дефиниција која се тичу овог алгоритма:

  • За дати ДКА увек можемо да пронађемо почетно партиционисање, на пример , будући да свака Неродова класа садржи само завршна или само незавршна стања, лако се види због чега ово задовољава услов (*). Случај када је је тривијалан, јер тада количнички аутомат има само једно стање ! Ту је дакле посао завршен на почетку па ћемо надаље претпоставити да ово неће да се деси.
  • Ако имамо партицију и и онда ћемо рећи да „сече” партицију по слову уколико постоји неко стање тако да и такође постоји тако да , дакле ако означимо ово претходни услови могу да се обједине у .
  • Уколико постоји партиција која сече неку партицију по неком слову онда због тога што је Неродова еквиваленција инваријантна надесно, закључујемо да се скуп може заменити двема мањим партицијама и где је је скуп дефинисан као у горњој ставци, при чему се не нарушава услов (*).
  • Уколико не постоји партиција која сече неку другу партицију (или саму себе) по неком слову, онда то значи да смо дошли до циља, односно ово партиционисање је количнички скуп за Неродову релацију.
  • Да не бисмо вршили проверу по свакој партицији тј. да ли она сече неку партицију из текућег партиционисања, формирамо радну лист која садржи само оне партиције које је нужно проверити и ажурирамо је кроз алгоритам.

Псеудокод алгоритма:

P := {F, Q \ F};
W := {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
          end;
     end;
end;

Доказ коректности алгоритма се базира на следећим тврђењима (циљна партиција је она која се не може даље делити, тј. она је једна класа еквиваленције Неродове релације )

  • Тврђење 1 : за и (односно ) важи ( није циљна партиција партиција (односно ) сече по неком слову.

У сваком кораку алгоритма, имаћемо партицију и радну листу и кључан је услов да уколико нека партиција није циљна, онда њу обавезно сече нека партиција из по неком слову. Овај услов такође мора да се пропагира кроз алгоритам, а претходно тврђење заправо казује да је он испуњен у првом кораку алгоритма. Овај услов ћемо обележити са (**).

  • Тврђење 2: Нека партиционисање и скуп задовољавају услов (**). I нека је . Тада уколико:
  1. не сече ниједну партицију из , онда нова радна листа и партиционисање задовољавају услов (**).
  2. сече неку партицију по слову и разлаже је на две нове партиције онда ново партиционисање које се добија уклањањем и додавањем две нове партиције и нова радна листа која се добија додавањем тачно једне од нових партиција (било која) задовољавају услов (**)
  3. сече неку партицију по слову и разлаже је на две нове партиције онда ново партиционисање које се добија уклањањем и додавањем две нове партиције и нова радна листа задовољавају услов (**).

Ово је најбржи алгоритам, за минимизацију аутомата који је до сада познат! Његова временска сложеност, узимајући да је величина азбуке константна је . Илуструјмо овај алгоритам на једном примеру.

Пример: Нека је и функција прелаза дата следећом таблицом:

0
1

, Дакле аутомат изгледа овако:

Детерминистички коначни аутомат којег треба минимализовати
Детерминистички коначни аутомат којег треба минимализовати
  1. У почетном кораку иницијализујемо почетно партиционисање где је и радну листу .
  2. Узимамо неку партицију из (то је за сада ) и одређујемо скуп свих стања са којима се преко 0 долази у ту партицији и скуп свих стања са којима се преко 1 долази у ту партицију респективно: ,
  3. Одавде видимо да преко 0 не сече ни једну партицију, а преко 1 раздваја у две нове партиције и , додајемо неку од ове две партиције (због оптимизације алгоритма, ону мању) у истовремено уклањајући јер она више неће сећи ниједну партицију. Ново партиционисање је сада где је а нова радна листа је .
  4. Сада разматрамо  : , а одавде видимо да не сече ни једну партицију ни преко 0 а ни преко 1 а како немамо других елемената у овде се алгоритам завршава и добили смо тражени количнички скуп.

Дакле количнички (минимални) аутомат изгледа овако:

Минимализовани ДКА
Минимализовани ДКА

Референце[уреди | уреди извор]

  1. ^ Хопцрофт, Мотwани & Уллман 2001, Сецтион 4.4.3, "Минимизатион оф ДФА'с".

Литература[уреди | уреди извор]

Спољашње везе[уреди | уреди извор]