DFA
Deterministic Finite Automata

(Determinisztikus véges állapotú gép)

Definíció:

A számítógép-tudományban a determinisztikus véges állapotú gép, vagy determinisztikus véges állapotú automata (angolul deterministic finite state machine vagy deterministic finite automaton, általánosan használt rövidítéssel: DFA) egy véges állapotú gép ahol minden állapot - bejövő szimbólum párhoz egy, és csakis egy másik állapotba való átmenet tartozik.

A DFA a szabályos nyelvek halmazába tartozó nyelvek felismerésénél használható, más nyelveknél nem alkalmazható.

A DFA egy bejövő szimbólumokból álló stringgel dolgozik. Minden egyes bejövő szimbólum hatására a gép állapota az adott átmeneti függvény alapján megváltozik (vagy ugyanaz marad). Amikor az utolsó bejövő szimbólum beérkezik, az a gép állapotától függöen vagy elfogadásra vagy visszautasításra kerül.

A DFA-t tekinthetjük egy speciális Turing-gépnek, amely nem tudja az olvasófejet mozgatni, és csak előre képes az mozgatni a szalagját.



C nyelven megvalósított algoritmus:

A nyelv (L) azokat a szavakat tartalmazza, amelyek páros hosszúak és szerepel bennük legalább egy "c" karakter.

∑={a, b, c}


DFA




#include <stdio.h>

int main()

{

 char bejovo[255];

 int allapot=0;

 int i=0;

 

 FILE * f = fopen("bejovo.txt", "rt");

  if (f!=NULL)

  {

   fscanf(f, "%s", bejovo);

   fclose(f);

  }

  else

  {

   printf("Nincs fájl!");

   return 1;

  }

 

 while (bejovo[i]!='\0')

 {

  if ((bejovo[i]=='a')||(bejovo[i]=='b'))

  {

   if (allapot==0)

   {

    allapot=1;

    printf("Allapot: 1-es\n");

    printf("NEM vegallapot...\n\n");

   }

   else if (allapot==1)

   {

    allapot=0;

    printf("Allapot: 0-as\n");

    printf("NEM vegallapot...\n\n");

   }

   else if (allapot==2)

   {

    allapot=3;

    printf("Allapot: 3-as\n");

    printf("Az automata vegallapotba kerult.\n\n");

   }

   else if (allapot==3)

   {

    allapot=2;

    printf("Allapot: 2-es\n");

    printf("NEM vegallapot...\n\n");

   }

  }

  else if (bejovo[i]=='c')

  {

   if ((allapot==0)||(allapot==3))

   {

    allapot=2;

    printf("Allapot: 2-es\n");

    printf("NEM vegallapot...\n\n");

   }

   else if ((allapot==1)||(allapot==2))

   {

    allapot=3;

    printf("Allapot: 3-as\n");

    printf("Az automata vegallapotba kerult.\n\n");

   }

  }

  i++;

 }

 allapot=0;

 getchar();

}

C kód: dfa.c

Ha a következő txt fájlból olvassuk be a karaktereket az automata részére, akkor az automata nem kerül végálapotba:
bejovo.txt

Ha a következő txt fájlból olvassuk be a karaktereket az automata részére, akkor az automata végálapotba kerül:
bejovo.txt



Written By Carruzzo ©