En ikke-deterministisk finit automat (NFA, eng. nondeterministic finite automaton , NFA) er en deterministisk finite automat (DFA, eng. deterministic finite automaton , DFA), der ikke opfylder følgende betingelser:
Især er enhver DFA også en NFA.
Ved at bruge undersætkonstruktionsalgoritmen , kan enhver NFA konverteres til en ækvivalent DFA, det vil sige en DFA, der genkender det samme formelle sprog [1] . Ligesom DFA genkender NFA kun almindelige sprog .
NFA blev foreslået i 1959 af Michael O. Rabin og Dana Scott [2] som viste, at det svarede til DFA. NFA bruges i implementeringen af regulære udtryk - Thompsons konstruktion er en algoritme til at konvertere et regulært udtryk til NFA, der effektivt kan genkende mønstret af strenge. Omvendt kan Kleenes algoritme bruges til at transformere en NFA til et regulært udtryk, hvis størrelse generelt afhænger eksponentielt af størrelsen af automaten.
NFA er generaliseret på mange måder, for eksempel: ikke-deterministiske endelige automater med ε-overgange , finite-state transducere, pushdown- automater , alternerende automater, ω-automater og probabilistiske automater . Ud over DFA kendes andre specielle tilfælde af NFA'er - entydige finite automata ( eng. unambiguous finite automata , UFA) og self -verifying finite automata ( eng. self-verifying finite automata , SVFA).
Der er flere uformelle tilsvarende beskrivelser:
For en mere elementær introduktion til den formelle definition, se artiklen " Automata Theory ".
En NFA er formelt repræsenteret som en 5-tuple bestående af:
Her menes graden af sættet .
Givet en NFA , genkender den et sprog, der er betegnet som og defineret som sættet af alle strenge over alfabetet , der accepteres af automaten .
Generelt set er der ifølge de uformelle forklaringer ovenfor flere ækvivalente formelle strengdefinitioner, der accepteres af automaten :
Automatdefinitionen ovenfor bruger en enkelt starttilstand , hvilket ikke er et krav. Nogle gange er en NFA defineret med et sæt begyndelsestilstande. Der er en simpel konstruktion , der tager en NFA med flere starttilstande til en NFA med en enkelt starttilstand.
Den følgende binære alfabetautomat bestemmer, om inputstrengen ender på én. Lad , hvor overgangsfunktionen kan defineres af følgende tilstandsovergangstabel (sammenlign med den øverste figur til venstre):
IndgangStat | 0 | en |
---|---|---|
Da sættet indeholder mere end én tilstand, er automaten ikke-deterministisk. Automatsproget kan beskrives som et regulært sprog givet af et regulært udtryk . (0|1)*1
Alle mulige tilstandssekvenser for inputstrengen "1011" er vist i figuren nedenfor. Strengen accepteres af automaten , fordi en af tilstandssekvenserne opfylder ovenstående definition. Det gør ikke noget, at de andre sekvenser ikke lykkes. Tegningen kan fortolkes på to måder:
Evnen til at læse den samme figur på to måder viser også ækvivalensen af de to forklaringer ovenfor.
I modsætning hertil afvises strengen "10" af automaten (alle mulige sekvenser af tilstande for inputstrengen for en given input er vist i figuren øverst til højre), da der ikke er nogen sti, der når den endelige tilstand efter at have læst den endelige tegn 0. Selvom tilstanden kan nås efter at have modtaget det første tegn "1", betyder det ikke, at inputstrengen "10" er acceptabel. Det betyder kun, at inputstrengen "1" ville være acceptabel.
En deterministisk endelig automat ( DFA ) kan betragtes som en speciel slags NFA, hvor overgangsfunktionen for enhver tilstand og bogstaver i alfabetet kun har én resulterende tilstand. Det er således klart, at ethvert formelt sprog , der kan genkendes med en DFA, også kan genkendes med en NFA.
Omvendt er der for enhver NFA en DFA, der genkender det samme formelle sprog. En DFA kan bygges ved hjælp af undersætkonstruktionen .
Dette resultat viser, at NFA på trods af sin store fleksibilitet ikke er i stand til at genkende sprog, der ikke kan genkendes af nogen DFA. Dette er også vigtigt i praksis for at konvertere strukturelt enklere NFA'er til mere beregningseffektive DFA'er. Men hvis NFA har n tilstande, kan den resulterende DFA have op til 2n tilstande, hvilket nogle gange gør konstruktionen upraktisk for store NFA'er.
Den ikke-deterministiske endelige automat med ε-overgange (NFA-ε) er en yderligere generalisering allerede for NFA. Denne overgangsfunktionsautomat har lov til at have den tomme streng ε som input. En overgang uden brug af et inputsymbol kaldes en ε-overgang. I et tilstandsdiagram er disse overgange normalt mærket med det græske bogstav ε. ε-overgange giver en bekvem måde at modellere systemer, hvis nuværende tilstand ikke er nøjagtigt kendt. For eksempel, hvis vi modellerer et system, hvis nuværende tilstand ikke er klar (efter at have behandlet en inputstreng) og kan være enten q eller q', kan vi tilføje en ε-overgang mellem disse to tilstande, hvilket bringer automaten til begge tilstande kl. den samme tid.
NFA-ε er formelt repræsenteret af en 5-tupel , , som består af:
Her betyder sættets magt , og ε betyder den tomme streng.
For en tilstand, lad betegne det sæt af tilstande, der kan nås fra følgende ε-overgange i overgangsfunktionerne , nemlig hvis der er en sekvens af tilstande, således at:
Sættet er kendt som ε -tilstandslukningen .
ε-lukningen er også defineret for sættet af tilstande. ε-lukningen af sættet af tilstande, , af NK-automaten er defineret som det sæt af tilstande, der kan nås fra sættets elementer ved ε-overgange. Formelt, for
Lad være en snor over alfabetet . Automaten accepterer en streng, hvis der er en sekvens af tilstande i med følgende betingelser:
Lad der være en NFA-ε med et binært alfabet, der bestemmer, om inputstrengen indeholder et lige antal nuller eller et lige antal enere. Bemærk, at 0 forekomster er et lige tal.
I formel notation, lad , hvor overgangsrelationen kan defineres af en sådan tilstandsovergangstabel :
IndgangStat | 0 | en | ε |
---|---|---|---|
S0 _ | {} | {} | { S 1 , S 3 } |
S1 _ | { S2 } _ | { S 1 } | {} |
S2 _ | { S 1 } | { S2 } _ | {} |
S3 _ | { S 3 } | { S4 } _ | {} |
S4 _ | { S4 } _ | { S 3 } | {} |
kan opfattes som en forening af to DFA'er , den ene med stater og den anden med stater . Sproget kan beskrives som et regulært sprog givet af det regulære udtryk (1*(01*01*)*) ∪ (0*(10*10*)*). Vi definerer ved hjælp af ε-overgange, men vi kan definere uden dem.
For at vise, at NFA-ε er ækvivalent med NFA, skal man først bemærke, at NFA er et specialtilfælde af NFA-ε, det er tilbage at vise, at der for enhver NFA-ε er en tilsvarende NFA.
Lad der være NFA-ε. NFA svarer til , hvor for enhver og .
Så svarer NFA-ε til NFA. Da NFA svarer til DFA, svarer NFA-ε også til DFA.
En NFA siges at være lukket under en ( binær / unær ) operation. Hvis NFA genkender de sprog, der opnås ved at anvende denne handling på de sprog, der er anerkendt af NFA. NFA'er er lukket med hensyn til følgende operationer.
Da NFA'er er ækvivalente med ε-transition nondeterministic finite automata (NFA-ε), er lukningerne ovenfor bevist ved hjælp af lukkeegenskaberne for NFA-ε. Det følger af lukningsegenskaberne ovenfor, at NFA'er kun genkender regulære sprog .
NFA'er kan bygges ud fra ethvert regulært udtryk ved hjælp af Thompson-algoritmen .
Maskinen starter fra en bestemt begyndelsestilstand og læser en tegnstreng bestående af bogstaverne i dens alfabet . Automaten bruger overgangsfunktionen Δ til at bestemme den næste tilstand ud fra den aktuelle tilstand og det tegn eller den tomme streng, der lige er blevet læst. Men "NFA's næste tilstand afhænger ikke kun af det aktuelle inputsymbol, men også af et vilkårligt antal efterfølgende inputhændelser. Mens disse efterfølgende begivenheder finder sted, er det umuligt at afgøre, hvilken tilstand maskinen er i” [13] . Hvis automaten er i den endelige tilstand efter det sidst læste tegn, siges NFA at acceptere strengen, ellers siges den at afvise strengen.
Sættet af alle strenge, der accepteres af NFA, er det sprog, som NFA accepterer. Dette sprog er et almindeligt sprog .
For enhver NFA kan man finde en deterministisk finit automat (DFA), der accepterer det samme sprog. Derfor er det muligt at konvertere en eksisterende NFA til en DFA for at implementere en (evt.) enklere maskine. En sådan transformation udføres ved hjælp af delmængdekonstruktionen , hvilket kan føre til en eksponentiel stigning i antallet af påkrævede tilstande. For et formelt bevis for delmængdekonstruktionen, se artiklen " Undersætkonstruktion [ ".
NFA kan modelleres på en af følgende måder:
NFA og DFA er ækvivalente i den forstand, at hvis et sprog genkendes af en NFA af en automat, genkendes det også af en DFA. Det omvendte er også sandt. Det er vigtigt og nyttigt at etablere en sådan ækvivalens. Vigtigt, fordi NFA'er kan bruges til at reducere kompleksiteten af det matematiske arbejde, der er nødvendigt for at etablere vigtige egenskaber i algoritmeteori . For eksempel er det meget lettere at bevise lukketheden af regulære sprog med NFA'er end med DFA'er. Nyttigt, fordi det at opbygge en NFA for at anerkende, at sprog nogle gange er meget vigtigere end at bygge en DFA for det sprog.
Formelle sprog og formelle grammatikker | |
---|---|
Generelle begreber | |
Type 0 | |
Type 1 |
|
Type 2 | |
Type 3 |
|
parsing |