Cómo construir un DFA que acepte cadenas de ceros y unos si y solo si el número de unos es igual al número de ceros

No puedes, como otros han señalado. Como justificación, algunos han hecho referencia al Lema de bombeo para los idiomas normales (sin más elaboración), que de hecho se puede utilizar para demostrar esta imposibilidad, pero permítanme dar otra explicación que se basa en el Teorema de Myhill-Nerode, que encuentro un mejor manera de demostrar la no regularidad.

Suponga que tiene una máquina de estado finito y está leyendo una cadena para determinar si acepta o no. Entonces estás sentado en algún estado y estás a punto de leer el resto de la cadena. En este punto, no importa qué camino tomaste a través de la máquina para llegar a donde estás ahora; todo lo que importa es a dónde vas después de leer las letras restantes de la cadena. Dicho de otra manera, supongamos que, después de leer las dos cadenas [matemáticas] u [/ matemáticas] y [matemáticas] v [/ matemáticas], terminas en el mismo estado. Entonces debería ser obvio que, para cualquier cadena [math] w [/ math], también terminarás en el mismo estado después de leer cada una de las concatenaciones [math] uw [/ math] y [math] vw [/ math ] En particular, no hay forma de que estés en un estado final después de leer [math] uw [/ math] y un estado no final después de leer [math] vw [/ math], o viceversa, ya que estos deben ser El mismo estado.

Ahora, supongamos que tenemos una máquina de estado finito que acepta exactamente su idioma: cadenas con números iguales de 0s y 1s. Pregúntese: ¿en qué estado estará después de leer cada una de las cadenas 0, 00, 000, 0000, y así sucesivamente? Afirmo que cada uno de estos estados debe ser diferente. Por ejemplo, considere 00 y 0000. Si los estados en los que se encontraba después de leer estas dos cadenas eran los mismos, entonces, como se explicó anteriormente, aún estaría en el mismo estado después de leer 00 [math] w [/ math] y 0000 [math] w [/ math], para cualquier cadena [math] w [/ math]. Pero, ¿qué pasa con [matemáticas] w [/ matemáticas] = 11? Después de leer 0011, debe estar en un estado final, porque esta cadena tiene el mismo número de 0s y 1s. Pero después de leer 000011, debe estar en un estado no final, porque esta cadena no tiene el mismo número de 0s y 1s. ¡Por lo tanto, no puedes estar en el mismo estado!

La conclusión es que, después de leer cada una de las diferentes cadenas 0, 00, 000, etc., debe estar en un estado diferente, lo que significa que su máquina no puede tener un número finito de estados. Es por eso que ninguna máquina de estado finito puede aceptar su idioma.

No puedes Un DFA solo puede modelar idiomas regulares, el idioma que ha descrito no es regular. Sin embargo, no tiene contexto y se puede representar con un PDA (autómata push-down)

Aquí hay algunas diapositivas de PowerPoint de Standford que en realidad usan el idioma que solicitó como ejemplo para idiomas no regulares:

http://web.stanford.edu/class/ar

Ok, entonces quieres construir DFA para la misma longitud de alfabetos. ¡Puede llevar la cuerda hasta una longitud infinita!

WW / W = (0,1) [matemáticas] * [/ matemáticas]

No tenemos ningún contador en DFA que calcule cuántos ceros y 1 llegaron hasta ahora. Tenemos memoria finita para DFA, pero aquí la longitud puede ser infinita.

Otra cosa es que no podemos encontrar ningún patrón en el lenguaje, por lo que este lenguaje no es regular (Prueba de lema de bombeo).

Por lo tanto, no puede dibujar DFA para la pregunta formulada.

Ahora la solución, puede resolverlo usando los autómatas Push down.

Empuje hacia abajo automata = DFA + stack (memoria).

¿Cuál es la solución PDA?

La pila está vacía inicialmente. Supongamos que viene un número n de 0, por lo que PDA deja que todos los 0 empujen en la pila. El contador de la pila se incrementa después de cada operación de empuje. Ahora todos los 0 han terminado y ahora todos los 1 están llegando, por lo que PDA saca todos los 0 de la pila y esta operación se lleva a cabo hasta que la pila vuelva a estar vacía. Si la pila no está vacía por fin, el PDA no puede alcanzar el estado final. Eso significa que la cadena dada no acepta.

Esto es imposible en el caso general; es decir, para cadenas arbitrariamente largas.

La forma habitual de probar idiomas no puede ser reconocida por un DFA es mediante el uso del llamado lema de bombeo que básicamente establece que las cadenas largas en los tipos de idiomas que un DFA puede aceptar se pueden diseccionar en una parte inicial, una parte media y una parte final tal que la parte central se pueda repetir arbitrariamente muchas veces y las cadenas resultantes de hacer esto serán parte del lenguaje. Uno puede ver que esto no será posible con las cadenas en el idioma que desea reconocer .

Hans, por supuesto, tiene razón. Aquí hay una forma intuitiva de pensarlo. La única forma en que un FA puede “recordar” lo que ha visto es a través de los estados. Entonces, si necesita recordar que ha visto [matemática] n [/ matemática] ceros, entonces debe tener al menos [matemática] n [/ matemática] estados; de hecho, para aceptar cadenas que tienen [math] n [/ math] ceros y unos, necesita tener al menos [math] 2n [/ math] estados. Entonces debería ver cómo construir autómatas para cualquier [matemática] n [/ matemática] fija, de hecho, debería ver cómo construir una que funcione para [matemática] \ forall k \ leq n [/ matemática]. Sin embargo, si [math] n [/ math] no es fijo, entonces el autómata necesitaría tener un número infinito de estados. Pero, por definición, el conjunto de estados es finito. Necesita un PDA y una pila.

¿Qué significa que un autómata “contenga el símbolo [matemáticas] 0 [/ matemáticas]”? ¿Significa que [matemáticas] 0 [/ matemáticas] es un elemento del alfabeto de entrada?

Supongo que está solicitando un DFA [matemática] M [/ matemática] tal que

[matemática] L (M) = \ {w \ in \ {0,1 \} ^ * \ mid w \ text {contiene un número igual de} 0 \ text {sy} 1 \ text {s} [/ math ] [matemáticas] \} [/ matemáticas]

Pero el lenguaje

[matemática] L = \ {w \ in \ {0,1 \} ^ * \ mid w \ text {contiene un número igual de} 0 \ text {sy} 1 \ text {s} [/ math] [math ] \} [/ matemáticas]

no es un lenguaje normal , por lo que no puede existir tal DFA. Esto se puede probar usando el lema Pumping para idiomas regulares.

¡Aquí! De hecho, debería darte una mejor respuesta, pero no he estudiado autómatas en mucho tiempo. Entonces, es mejor ver este video de YouTube.

No creo que pueda construir un autómata con estados finitos para hacerlo, a menos que tenga otras restricciones. Por ejemplo, si para una cadena aceptable, hay como máximo k más 0s que 1s antes de que aparezca un 1, entonces puede construir un DFA apropiado