logo

Introduksjon av Finite Automata

Finite Automata(FA) er den enkleste maskinen for å gjenkjenne mønstre. Den brukes til å karakterisere et vanlig språk, for eksempel: /baa+!/.
Det brukes også til å analysere og gjenkjenne naturlige språkuttrykk. Den endelige automaten eller den endelige tilstandsmaskinen er en abstrakt maskin som har fem elementer eller tupler. Den har et sett med tilstander og regler for å flytte fra en tilstand til en annen, men det avhenger av det anvendte inngangssymbolet. Basert på tilstandene og settet med regler kan inndatastrengen enten aksepteres eller avvises. I utgangspunktet er det en abstrakt modell av en digital datamaskin som leser en inngangsstreng og endrer dens interne tilstand avhengig av gjeldende inngangssymbol. Hver automat definerer et språk, det vil si sett med strenger den godtar. Følgende figur viser noen viktige funksjoner for generell automatisering.

Figur: Funksjoner av Finite Automata



Figuren ovenfor viser følgende funksjoner til automater:

sortert arraylist i java
  1. Inndata
  2. Produksjon
  3. Automater
  4. Statsforhold
  5. Utgangsforhold

En endelig automat består av følgende:

Q : Finite set of states. ? : set of Input Symbols. q : Initial state. F : set of Final States. ? : Transition Function.>

Formell spesifikasjon av maskin er



{ Q, ?, q, F, ? }>

FA er karakterisert i to typer:

1) Deterministiske endelige automater (DFA):

DFA consists of 5 tuples {Q, ?, q, F, ?}. Q : set of all states. ? : set of input symbols. ( Symbols which machine takes as input ) q : Initial state. ( Starting state of a machine ) F : set of final state. ? : Transition Function, defined as ? : Q X ? -->Q.>

I en DFA, for et bestemt inndatategn, går maskinen kun til én tilstand. En overgangsfunksjon er definert for hver tilstand for hvert inngangssymbol. Også i DFA er null (eller ?) flytting ikke tillatt, dvs. DFA kan ikke endre tilstand uten noe inndatategn.



strengformat java

Konstruer for eksempel en DFA som aksepterer et språk med alle strenger som slutter med 'a'.
gitt: ? = {a,b}, q = {q0}, F={q1}, Q = {q0, q1}

Vurder først et språksett med alle mulige akseptable strenger for å konstruere et nøyaktig tilstandsovergangsdiagram.
L = {a, aa, aaa, aaaa, aaaaa, ba, bba, bbba, far, far, far, far}
Ovenfor er en enkel delmengde av de mulige akseptable strengene, det kan mange andre strenger som slutter med 'a' og inneholder symboler {a,b}.

Fig 1. Tilstandsovergangsdiagram for DFA med ? = {a, b}

Strenger som ikke aksepteres er,
ab, bb, aab, abbb, osv.

Tilstandsovergangstabell for automaten ovenfor,

?StatSymbol? en b
q0 q1 q0
q1 q1 q0

En viktig ting å merke seg er, det kan være mange mulige DFAer for et mønster . En DFA med et minimum antall stater er generelt foretrukket.

2) Nondeterministic Finite Automata (NFA): NFA ligner på DFA bortsett fra følgende tilleggsfunksjoner:

  1. Null (eller ?) bevegelse er tillatt, dvs. den kan bevege seg fremover uten å lese symboler.
  2. Evne til å overføre til et hvilket som helst antall stater for en bestemt inngang.

Disse funksjonene ovenfor gir imidlertid ingen kraft til NFA. Hvis vi sammenligner begge når det gjelder kraft, er begge likeverdige.

junitprøvetilfeller

På grunn av tilleggsfunksjonene ovenfor har NFA en annen overgangsfunksjon, resten er den samme som DFA.

?: Transition Function ?: Q X (? U ? ) -->2 ^ Q.>

Som du kan se i overgangsfunksjonen er for alle inndata inkludert null (eller ?), kan NFA gå til et hvilket som helst antall stater. Nedenfor er for eksempel en NFA for problemet ovenfor.

Fig 2. Tilstandsovergangsdiagram for NFA med ? = {a, b}

Tilstandsovergangstabell for automaten ovenfor,

konverter heltall til streng java
?StatSymbol? en b
q0 {q0,q1} q0
q1 ? ?

En viktig ting å merke seg er, i NFA, hvis en bane for en inngangsstreng fører til en endelig tilstand, så inndatastrengen er akseptert . For eksempel, i NFA ovenfor, er det flere baner for inngangsstrengen 00. Siden en av banene fører til en endelig tilstand, aksepteres 00 av NFA ovenfor.

Noen viktige punkter:

    Berettigelse:
Siden alle tuplene i DFA og NFA er like bortsett fra en av tuplene, som er overgangsfunksjon (?)

In case of DFA ? : Q X ? -->Q I tilfelle NFA? : Q X ? --> 2Q>

Nå hvis du observerer, vil du finne ut Q X? –> Q er en del av Q X ? –> 2Q.

På RHS-siden er Q delmengden av 2Qsom indikerer at Q er inneholdt i 2Qeller Q er en del av 2Q, men det motsatte er ikke sant. Så matematisk kan vi konkludere med det hver DFA er NFA, men ikke omvendt . Likevel er det en måte å konvertere en NFA til DFA, så det finnes en tilsvarende DFA for hver NFA .

  1. Både NFA og DFA har samme kraft og hver NFA kan oversettes til en DFA.
  2. Det kan være flere slutttilstander i både DFA og NFA.
  3. NFA er mer et teoretisk konsept.
  4. DFA brukes i leksikalsk analyse i kompilator.
  5. Hvis antallet stater i NFA er N, kan dens DFA ha maksimalt 2Nantall stater.

Se Quiz om regulære uttrykk og endelige automater.