Implementaciones para la simulación de autómatas finitos en su forma determinista y no determinista.

Determinismo

Un Autómata Finito determinista (AFD) es una quíntupla $(Q,\Sigma,\delta,s,F)$ donde:

  1. $Q$ es un conjunto finito de estados.
  2. $\Sigma$ es un alfabeto finito.
  3. $\delta : Q \times \Sigma \to Q$ es la función (total) de transición.
  4. $s \in Q$ es el estado inicial.
  5. $F \subseteq Q$ es el conjunto de estados finales (de aceptación).

Sea $M$ un AFD y $(q, w) \in Q\times\Sigma^\star$. Entonces se define la función $\hat{\delta}$ de transición generalizada que computa el estado resultante de ejecutar $M$ sobre la configuración $(q, w)$ tal que:

donde $q \in Q$, $v \in \Sigma^\star$ y $x \in \Sigma$.

Sea $M=(Q,\Sigma,\delta,s,F)$ un AFD. Entonces el lenguaje $\mathcal{L}(M)\subseteq\Sigma^\star$ aceptado por $M$ se define:

Implementación

La implementación deriva de $\hat{\delta}$ en la definición 1.2

\begin{algorithm}\caption{}\begin{algorithmic}
  \PROCEDURE{afd}{$w: $\uppercase{$\Sigma^\star$}}
    \STATE $q := q_0$
    \STATE $w_i := w_0$
    \WHILE{$w_i \neq \varepsilon$}
      \STATE $q := $ \CALL{move}{$q, w_i$}
      \STATE $w_i := w_{i+1}$
    \ENDWHILE
    \IF{$q \in $ F}
      \PRINT \TRUE
    \ELSE
      \PRINT \FALSE
    \ENDIF
  \ENDPROCEDURE
\end{algorithmic}\end{algorithm}

El costo de reconocer $w$ es $O(\len{w})$.

No determinismo

Un Autómata Finito no determinista (AFN) es una quíntupla $(Q,\Sigma,\delta,s,F)$ donde:

  1. $Q$ es un conjunto finito de estados.
  2. $\Sigma$ es un alfabeto finito.
  3. $\delta : Q \times \Sigma \to 2^Q$ es la función de transición.
  4. $s \in Q$ es el estado inicial.
  5. $F \subseteq Q$ es el conjunto de estados finales (de aceptación).

Sea $N$ un AFN y $(q,w)\in Q\times\Sigma^\star$. Entonces se define la función $\hat{\delta}$ de transición generalizada que computa el conjunto de los estados resultantes de ejecutar $N$ sobre la configuración $(q, w)$ tal que:

donde $q \in Q$, $v \in \Sigma^\star$ y $x \in \Sigma$.

Sea $N=(Q,\Sigma,\delta,s,F)$ un AFN. Entonces el lenguaje $\mathcal{L}(N)\subseteq\Sigma^\star$ aceptado por $N$ se define:

Implementación

Backtracking
\begin{algorithm}\caption{}\begin{algorithmic}
  \PROCEDURE{afn}{$w:$\uppercase{$\Sigma^\star$}}
    \STATE \uppercase{$R$} $:=$ \CALL{afn-rec}{$q_0$, $w_0$}
    \IF{\uppercase{$R \cap F \neq \emptyset$}}
      \PRINT \TRUE
    \ELSE
      \PRINT \FALSE
    \ENDIF
  \ENDPROCEDURE
  \STATE
  \FUNCTION{afn-rec}{$q:$\uppercase{$Q$}, $w_i:$\uppercase{$\Sigma$}}
    \IF{$w_i = \varepsilon$}
      \RETURN $\{ q \}$
    \ELSE
      \STATE \uppercase{$R$} $:= \emptyset$
      \FORALL{$r$ \textbf{in} \uppercase{$Q$}}
        \IF{$r \in $ \CALL{move}{$q$, $w_i$}}
          \STATE \uppercase{$R$} $:=$ \uppercase{$R$} $ \cup\;$\CALL{afn-rec}{$r$, $w_{i+1}$}
        \ENDIF
      \ENDFOR
      \RETURN \uppercase{$R$}
    \ENDIF
  \ENDFUNCTION
\end{algorithmic}\end{algorithm}
Según $\hat{\delta}$

La implementación deriva de $\hat{\delta}$ en la definición 2.2.

\begin{algorithm}\caption{}\begin{algorithmic}
  \PROCEDURE{afn}{$w:$\uppercase{$\Sigma^\star$}}
    \STATE \uppercase{$R$} $:= \{ q_0 \}$
    \STATE $w_i := w_0$
    \WHILE{$w_i \neq \varepsilon$}
      \STATE \uppercase{$R$} $:=$ \CALL{move-union}{\uppercase{$R$}$, w_i$}
      \STATE $w_i := w_{i+1}$
    \ENDWHILE
    \IF{\uppercase{$R \cap F \neq \emptyset$}}
      \PRINT \TRUE
    \ELSE
      \PRINT \FALSE
    \ENDIF
  \ENDPROCEDURE
  \STATE
  \FUNCTION{move-union}{\uppercase{$R:2^Q$}, $x:$\uppercase{$\Sigma$}}
    \STATE \uppercase{$R^\prime$} $:= \emptyset$
    \FORALL{$r$ \textbf{in} \uppercase{$R$}}
      \STATE \uppercase{$R^\prime$} $:=$ \uppercase{$R^\prime$} $ \cup\;$\CALL{move}{$r, x$}
    \ENDFOR
    \RETURN \uppercase{$R^\prime$}
  \ENDFUNCTION
\end{algorithmic}\end{algorithm}

La unión de un máximo de $\len{Q}$ conjuntos con a lo sumo $\len{Q}$ estados tiene un costo de $O(\len{Q}^2)$.

El costo de reconocer $w$ es $O(\len{w}\len{Q}^2)$.

No determinismo con $\veps$

Un Autómata Finito no determinista con transiciones $\veps$ (AFN-e) es una quíntupla $(Q,\Sigma,\delta,s,F)$ donde:

  1. $Q$ es un conjunto finito de estados.
  2. $\Sigma$ es un alfabeto finito.
  3. es la función de transición.
  4. $s \in Q$ es el estado inicial.
  5. $F \subseteq Q$ es el conjunto de estados finales (de aceptación).

Sea $N$ un AFN-e y $(q,w)\in Q\times\Sigma^\star$. Entonces se define la función $\hat{\delta}$ de transición generalizada que computa el conjunto de los estados resultantes de ejecutar $N$ sobre la configuración $(q, w)$ tal que:

donde:

  • $q \in Q$, $v \in \Sigma^\star$ y $x \in \Sigma$.
  • $C_\veps(q)$ es la clausura respecto de $\veps$ para el estado $q$, esto es el conjunto de todos los estados alcanzables desde $q$ usando únicamente transiciones $\veps$.
  • Sea $Q$ un conjunto de estados, $C_\veps(Q) = \bigcup\limits_{q \; \in \; Q}^{} C_\veps(q)$

Sea $N=(Q,\Sigma,\delta,s,F)$ un AFN-e. Entonces el lenguaje $\mathcal{L}(N)\subseteq\Sigma^\star$ aceptado por $N$ se define:

Implementación

404

Bibliografía

  1. J. Hopcroft, R. M. & J. U. (2000). Introduction to Automata Theory, Languages, and Computation (2nd ed.). Addison Wesley.