2010-03-09 12 views
6

¿Cuál es la expresión regular del lenguaje 0 m n donde m + n es par?Problema de expresión regular

+0

O yo estoy cansado o su la pregunta tiene muy poco sentido. –

+0

No creo que esto tenga nada que ver con regexp ... –

+0

@Andy E: No es porque estés cansado. –

Respuesta

14

Si se refiere a una cadena 000...111... donde la longitud de la cadena es par, se puede utilizar ^(00)*(01)?(11)*$

+0

esto no es una respuesta porque también valida 00 01 1 11 cuya longitud no es pareja. – erasmus

+0

Eso es porque olvidé anclar la expresión regular. Funciona correctamente ahora. – SLaks

+2

+1 por la respuesta. Ahora, ¿cómo puedo votarte por entender la pregunta en primer lugar? – Amarghosh

1

Ok, por lo que necesita tener en cuenta para cero los casos cuando hay pares e incluso cuando están. Esto requiere dos estados, uno para incluso ceros, uno para ceros impares. Luego, para el caso de cero impar, necesita tener 1 uno y luego un número par de unidades. Para el caso par, solo necesitas un número par de unidades.

Es fácil escribir la DFA, pero no sé cómo trazar aquí, así que voy a aventurar una respuesta a la expresión regular:

(0 (00)* 1 (11)*) \/ (00)*(11)* 
+0

Aquí están las máquinas trazadas para esa expresión regular. Full NFA: http://static.max99x.com/misc/nfa.png. NFA limpiado: http://static.max99x.com/misc/nfa2.png. DFA minimizado: http://static.max99x.com/misc/dfa.png. –

+0

@Max: ¡Impresionante! ¿Es esa una herramienta de tu propio diseño? Recuerdo haber implementado un convertidor NFA a mínimo DFA hace muchos años, pero nunca se me ocurrió renderizarlo con graphviz :) –

+0

@ Il-Bhima: Sí. http://max99x.com/school/automata-editor. Sin embargo, podría ser algo problemático, ya que fue un proyecto escolar rápido. –