7 votos

Cómo demostrar que $ALL_{DFA}$ está en P

¿Cómo puedo demostrar que $ALL_{DFA}$ está en P ?

$ALL_{DFA} = \{ \langle A \rangle \mid A \text{ is a DFA and } L(A) = \Sigma^* \}$

14voto

THelper Puntos 631

Obsérvese que un DFA acepta $\Sigma^*$ si y sólo si todos los estados alcanzables desde el estado inicial, $q_0$ están aceptando. Esto puede decidirse fácilmente en tiempo polinómico realizando una búsqueda de amplitud o profundidad en el DFA de $q_0$ . Si en algún momento se visita un estado no aceptable, rechazar , en caso contrario, si sólo se encuentran estados de aceptación, aceptar .

Curiosamente, este problema es mucho más difícil para las NFA; $\{ \langle A \rangle \mid A \text{ is an NFA and } L(A) = \Sigma^* \}$ es NP-difícil.

-1voto

jani Puntos 1

Mi respuesta a este problema en una tarea reciente fue originalmente similar a la otra respuesta en esta pregunta: Realizar una búsqueda de amplitud en la entrada, Si se visita un estado de no aceptación, rechazar, de lo contrario aceptar. Sin embargo, esta solución es equivocado . Este decididor aceptará un AFD que no acepte todas las entradas si, por ejemplo, no hay transición para uno de los caracteres de Σ. El siguiente DFA (con un alfabeto de 0 y 1) es un ejemplo de esto. No aceptará entradas con un 1, pero no hay ningún estado de rechazo que haga que este DFA sea rechazado por el decidor.

The decider accepts this DFA but this DFA does not accept all inputs.

La respuesta es, en realidad, construir el complemento a la entrada y comprobar si el lenguaje del complemento es un conjunto vacío. Puede hacer esto haciendo una búsqueda de amplitud o profundidad en el complemento y si se encuentra un estado de aceptación, rechazar la entrada y en caso contrario, aceptar.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X