Nedeterministický stavový automat

Nedeterministický konečný automat (NFA, angl.  nedeterministický konečný automat , NFA) je deterministický konečný automat (DFA, angl.  deterministický konečný automat , DFA), který nesplňuje následující podmínky:

Konkrétně každá DFA je také NFA.

Pomocí algoritmu konstrukce podmnožiny lze libovolnou NFA převést na ekvivalentní DFA, tedy DFA, která rozpoznává stejný formální jazyk [1] . Stejně jako DFA rozpoznává NFA pouze běžné jazyky .

NFA byl navržen v roce 1959 Michaelem O. Rabinem a Danou Scott [2] , kteří ukázali, že je ekvivalentní k DFA. NFA se používá při implementaci regulárních výrazů  - Thompsonova konstrukce je algoritmus pro převod regulárního výrazu na NFA, který dokáže efektivně rozpoznat vzor řetězců. Naopak, Kleeneův algoritmus lze použít k transformaci NFA na regulární výraz , jehož velikost obecně závisí exponenciálně na velikosti automatu.

NFA je zobecněna mnoha způsoby, například: nedeterministické konečné automaty s ε-přechody , konečné převodníky, zásobníkové automaty , střídavé automaty, ω-automaty a pravděpodobnostní automaty . Kromě DFA jsou známy další speciální případy NFA - jednoznačné konečné automaty ( angl.  jednoznačné konečné automaty , UFA) a samoověřovací konečné automaty ( angl. self -verifying finite automata , SVFA).  

Neformální úvod

Existuje několik neformálních ekvivalentních popisů:

Formální definice

Pro elementárnější úvod do formální definice viz článek " Teorie automatů ".

Automaty

NFA je formálně reprezentován jako 5-ti skládající se z:

Zde znamená stupeň sady .

Rozpoznaný jazyk

Daný NFA rozpozná jazyk, který je označen jako a definovaný jako množina všech řetězců v abecedě akceptovaných automatem .

Obecně řečeno, podle výše uvedených neformálních vysvětlení existuje několik ekvivalentních formálních definic řetězců akceptovaných automatem :

Slova. První podmínka říká, že stroj startuje ze stavu . Druhá podmínka říká, že pro každý znak v řetězci stroj přechází ze stavu do stavu podle přechodové funkce . Poslední podmínka říká, že stroj přijme řetězec , pokud vstupní řetězec způsobí ukončení stroje v jeho konečném stavu. Aby byl řetězec akceptován automatem , není vyžadováno, aby jakákoli sekvence stavů končila v konečném stavu, stačí, aby jedna sekvence k takovému stavu vedla. V opačném případě, tj . pokud není možné přejít z do stavu z , po , automat říká, že odmítne řetězec. Množina řetězců, kterou automat akceptuje , je jazyk rozpoznávaný automatem a tento jazyk je označen jako [9] [10] . Jinými slovy, je množina všech stavů dosažitelná ze stavu při získávání řetězce . Řetězec je akceptován, pokud lze dosáhnout nějakého koncového stavu z počátečního stavu pro vstupní řetězec [11] [12] .

Počáteční stav

Výše uvedená definice automatu používá jeden počáteční stav , který není podmínkou. Někdy je NFA definována sadou počátečních stavů. Existuje jednoduchá konstrukce , která převádí NFA s více počátečními stavy na NFA s jediným počátečním stavem.

Příklad

Následující automat binární abecedy určuje, zda vstupní řetězec končí jedničkou. Nechť , kde přechodovou funkci lze definovat pomocí následující tabulky přechodů stavů (srovnej s horním obrázkem vlevo):

VchodStát 0 jeden

Protože množina obsahuje více než jeden stav, je automat nedeterministický. Jazyk automatu lze popsat jako regulární jazyk daný regulárním výrazem . (0|1)*1

Všechny možné stavové sekvence pro vstupní řetězec "1011" jsou znázorněny na obrázku níže. Řetězec je akceptován automatem, protože jedna ze stavových sekvencí splňuje výše uvedenou definici. Nevadí, že ostatní sekvence neuspějí. Výkres lze interpretovat dvěma způsoby:

Schopnost číst stejný obrázek dvěma způsoby také ukazuje ekvivalenci obou výše uvedených vysvětlení.

Naproti tomu řetězec "10" je automatem odmítnut (všechny možné sekvence stavů pro vstupní řetězec pro daný vstup jsou zobrazeny na obrázku vpravo nahoře), protože neexistuje žádná cesta, která by po přečtení konečného stavu dosáhla konečného stavu. znak 0. Přestože stavu lze dosáhnout po přijetí prvního znaku "1", neznamená to, že vstupní řetězec "10" je přijatelný. Znamená to pouze, že vstupní řetězec "1" by byl přijatelný.

Ekvivalence DFA

Za  speciální druh NFA lze považovat deterministický konečný automat ( DFA ), ve kterém má přechodová funkce pro jakýkoli stav a písmena abecedy pouze jeden výsledný stav. Je tedy jasné, že jakýkoli formální jazyk , který lze rozpoznat pomocí DFA, lze rozpoznat také pomocí NFA.

Naopak pro každou NFA existuje DFA, která uznává stejný formální jazyk. DFA lze sestavit pomocí konstrukce podmnožiny .

Tento výsledek ukazuje, že NFA navzdory své velké flexibilitě nedokáže rozpoznat jazyky, které nedokáže rozpoznat žádná DFA. To je také důležité v praxi, aby bylo možné převést strukturálně jednodušší NFA na výpočetně efektivnější DFA. Pokud má však NFA n stavů, výsledná DFA může mít až 2 n stavů , což někdy činí konstrukci pro velké NFA nepraktickou.

NCA s ε-přechody

Nedeterministický konečný automat s ε-přechody (NFA-ε) je dalším zobecněním již pro NFA. Tento automat přechodové funkce může mít jako vstup prázdný řetězec ε. Přechod bez použití vstupního symbolu se nazývá ε-přechod. Ve stavovém diagramu jsou tyto přechody obvykle označeny řeckým písmenem ε. ε-přechody poskytují pohodlný způsob, jak modelovat systémy, jejichž aktuální stav není přesně znám. Pokud například modelujeme systém, jehož aktuální stav není jasný (po zpracování nějakého vstupního řetězce) a může být buď q nebo q', můžeme mezi tyto dva stavy přidat ε-přechod, čímž automat uvedeme do obou stavů na stejný čas.

Formální definice

NFA-ε je formálně reprezentován 5-tice , , který se skládá z:

Zde znamená mocninu množiny a ε znamená prázdný řetězec.

ε-Uzavření stavu nebo množiny stavů

Pro stav označme množinu stavů dosažitelných z následujících ε-přechodů v přechodových funkcích , totiž pokud existuje taková posloupnost stavů , že:

Sada je známá jako uzávěr ε - stavu .

ε-uzávěr je také definován pro množinu stavů. ε-uzavření množiny stavů, , NK-automatu je definováno jako množina stavů, kterých lze dosáhnout z prvků množiny ε-přechody. Formálně pro


Přijatelné stavy

Nechť je řetězec nad abecedou . Automat přijímá řetězec , pokud existuje sekvence stavů s následujícími podmínkami:

  1. , kde pro jakoukoliv
  2. .
Slova. První podmínka říká, že stroj začíná ze stavu, který je ze stavu dosažitelný přes ε-přechody. Druhá podmínka říká, že po přečtení stroj vybere přechod z do a následně provede libovolný počet ε-přechodů podle přechodu z do . Poslední podmínka říká, že stroj přijímá , pokud poslední vstupní znak způsobí přechod stroje do jednoho z přijatých stavů. Jinak se říká, že automat řetězec odmítne . Sada řetězců, kterou akceptuje, je jazyk , který automat rozpoznává , a tento jazyk je označen jako .

Příklad

Nechť existuje NFA-ε s binární abecedou, která určuje, zda vstupní řetězec obsahuje sudý počet nul nebo sudý počet jedniček. Všimněte si, že 0 výskytů je sudé číslo.

Ve formálním zápisu nechť , kde přechodový vztah může být definován takovou tabulkou přechodů stavů :

VchodStát 0 jeden ε
S0 _ {} {} { S 1 , S 3 }
S1 _ { S2 } _ { S 1 } {}
S2 _ { S 1 } { S2 } _ {}
S3 _ { S 3 } { S4 } _ {}
S4 _ { S4 } _ { S 3 } {}

lze považovat za spojení dvou DFA  , jednoho se státy a druhého se státy . Jazyk lze popsat jako regulární jazyk daný regulárním výrazem (1*(01*01*)*) ∪ (0*(10*10*)*). Definujeme pomocí ε-přechodů, ale můžeme definovat i bez nich.

Ekvivalence NFA

Abychom ukázali, že NFA-ε je ekvivalentní NFA, nejprve poznamenejme, že NFA je speciální případ NFA-ε, zbývá ukázat, že pro jakýkoli NFA-ε existuje ekvivalent NFA.

Nechť existuje NFA-ε. NFA je ekvivalentní , kde pro libovolné a .

Potom je NFA-ε ekvivalentní NFA. Protože NFA je ekvivalentní DFA, NFA-ε je také ekvivalentní DFA.

Vlastnosti uzávěru

Říká se, že NFA je uzavřena v rámci ( binární / unární ) operace. Pokud NFA rozpozná jazyky, které jsou získány aplikací této operace na jazyky uznané NFA. NFA jsou uzavřeny s ohledem na následující operace.

Protože NFA jsou ekvivalentní ε-přechodovým nedeterministickým konečným automatům (NFA-ε), výše uvedené uzávěry jsou prokázány pomocí uzávěrových vlastností NFA-ε. Z výše uvedených vlastností uzavření vyplývá, že NFA rozpoznávají pouze regulární jazyky .

NFA lze sestavit z libovolného regulárního výrazu pomocí Thompsonova algoritmu .

Vlastnosti

Stroj začíná od určitého počátečního stavu a čte řetězec znaků sestávající z písmen jeho abecedy . Automat pomocí přechodové funkce Δ určí další stav z aktuálního stavu a právě přečteného znaku nebo prázdného řetězce. „Další stav NFA však závisí nejen na aktuálním vstupním symbolu, ale také na libovolném počtu následných vstupních událostí. Zatímco tyto následné události probíhají, není možné určit, v jakém stavu se stroj nachází“ [13] . Pokud je automat v konečném stavu po posledním přečteném znaku, NFA říká, že řetězec přijme, jinak se říká, že řetězec odmítne.

Sada všech řetězců akceptovaných NFA je jazyk, který NFA akceptuje. Tento jazyk je regulárním jazykem .

Pro jakýkoli NFA lze najít deterministický konečný automat (DFA), který přijímá stejný jazyk. Proto je možné převést existující NFA na DFA za účelem implementace (možná) jednoduššího stroje. Taková transformace se provádí pomocí konstrukce podmnožiny , což může vést k exponenciálnímu nárůstu počtu požadovaných stavů. Formální důkaz konstrukce podmnožiny naleznete v článku " Konstrukce podmnožiny ".

Implementace

NFA lze modelovat jedním z následujících způsobů:

Aplikace NCA

NFA a DFA jsou ekvivalentní v tom smyslu, že pokud je jazyk rozpoznán NFA automatem, rozpozná jej také DFA. Opak je také pravdou. Stanovení takové ekvivalence je důležité a užitečné. Důležité, protože NFA mohou být použity ke snížení složitosti matematické práce, která je potřebná k vytvoření důležitých vlastností v teorii algoritmů . Například je mnohem snazší prokázat uzavřenost běžných jazyků pomocí NFA než pomocí DFA. Užitečné, protože sestavení NFA pro rozpoznání daného jazyka je někdy mnohem důležitější než vytvoření DFA pro tento jazyk.

Viz také

Poznámky

  1. Martin, 2010 , str. 108.
  2. Rabin a Scott, 1959 , s. 114–125.
  3. Volební sekvence může vést k "slepé uličce", ve které žádný z přechodů není platný pro aktuální vstupní symbol a tento případ je považován za selhání (řetězec je odmítnut).
  4. Hopcroft, Ullman, 1979 , str. 19.
  5. Aho, Hopcroft & Ullman 1974 , str. 319.
  6. Hopcroft, Ullman, 1979 , str. 19-20.
  7. Sipser, 1997 , str. 48.
  8. Hopcroft, Motwani, Ullman, 2001 , str. 56.
  9. Aho, Hopcroft & Ullman 1974 , str. 320.
  10. Sipser, 1997 , str. 54.
  11. Hopcroft, Ullman, 1979 , str. 21.
  12. Hopcroft, Motwani, Ullman, 2001 , str. 59.
  13. Finite-State Machine FOLDOC Free Online Dictionary of Computing . Datum přístupu: 11. února 2020. Archivováno z originálu 4. dubna 2015.
  14. Chris Calabro. NFA do DFA vybuchnout. 2005-02-27 . Staženo 11. února 2020. Archivováno z originálu 7. února 2013.
  15. Hopcroft, Motwani, Ullman, 2001 , str. 153.

Literatura