2010-03-09 5 views
6

Quelle est l'expression régulière pour le langage 0 m n où m + n est pair?Problème d'expression régulière

+0

Soit je suis fatigué ou votre question n'a que très peu de sens. –

+0

Je ne pense pas que cela a quelque chose à voir avec regexp ... –

+0

@Andy E: Ce n'est pas parce que vous êtes fatigué mate. –

Répondre

14

Si vous voulez dire une chaîne 000...111... où la longueur de la chaîne est même, vous pouvez utiliser ^(00)*(01)?(11)*$

+0

ce n'est pas une réponse car elle valide également 00 01 1 11 dont la longueur n'est pas pair. – erasmus

+0

C'est parce que j'ai oublié d'ancrer la regex. Cela fonctionne correctement maintenant. – SLaks

+2

+1 pour la réponse. Maintenant, comment puis-je vous voter pour comprendre la question en premier lieu? – Amarghosh

1

Ok, donc vous devez prendre en compte pour zéro les cas où il y a étrange et quand ils sont encore. Cela nécessite deux états, un pour les zéros pairs, un pour les zéros impairs. Ensuite, pour le cas impaire zéro, vous devez avoir 1 un, puis un nombre pair de uns. Pour le cas pair, vous avez juste besoin d'un nombre pair.

Il est facile d'écrire le DFA, mais je ne sais pas comment tracer ici, donc je vais hasarder une hypothèse à l'expression régulière:

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

Voici les machines tracées pour cette regex. Full NFA: http://static.max99x.com/misc/nfa.png. Nettoyé NFA: http://static.max99x.com/misc/nfa2.png. DFA réduit: http://static.max99x.com/misc/dfa.png. –

+0

@Max: Génial! Est-ce un outil de votre propre conception? Je me souviens d'avoir implémenté un NFA pour un convertisseur DFA minimal il y a de nombreuses années, mais il ne m'est jamais venu à l'esprit de le faire avec graphviz :) –

+0

@ Il-Bhima: Ouais. http://max99x.com/school/automata-editor. Peut-être un peu bogué, cependant, puisque c'était un projet d'école rapide. –

Questions connexes