Si je comprends bien, les NFA ont le même pouvoir expressif que les expressions régulières. Souvent, la lecture d'expressions régulières équivalentes dans NFA est facile: vous traduisez des cycles en étoiles, des jonctions comme alternatives, etc. Mais que faire dans ce cas:
[ source ]
Les cycles qui se chevauchent rendent difficile de voir ce que cet automate accepte (en termes d'expressions régulières). Y a-t-il une astuce?
Réponses:
Plutôt que de "lire", vous devriez utiliser l'une des méthodes canonciales pour le faire. De loin le plus beau que j'ai vu est celui qui exprime l'automate comme un système d'équations de langages (réguliers) qui peut être résolu. C'est particulièrement agréable car il semble donner des expressions plus concises que les autres méthodes.
J'ai écrit ce document expliquant la méthode aux étudiants l'été dernier. Il se rapporte directement à une conférence spécifique; la référence mentionnée est la définition typique des expressions régulières. Une preuve du lemme d'Arden (un résultat nécessaire) est contenue; un pour l'exactitude de la méthode est manquant. Comme je l'ai appris lors d'une conférence, je n'ai malheureusement pas de référence.
L'application à l'automate donné est laissée comme exercice; un exemple complet est inclus dans le document lié ci-dessus .
Voir aussi ici où j'ai posté une réponse similaire.
la source
S'il n'y avait qu'une chaîne d'états sans boucle, sauriez-vous quoi faire?
S'il y avait une boucle simple sans cette ramification qui se chevauchait, sauriez-vous quoi faire?
(Si la réponse est «non», pensez d'abord à ces cas.)
Maintenant, l'idée est de transformer progressivement l'automate pour le mettre sous une forme où vous pouvez repérer ces motifs: chaînes, boucles et chemins divergents qui se reconvertissent à la fin (conduisant à l'alternance). À chaque étape de la transformation, veillez à ce que l'automate transformé reconnaisse toujours le même langage.
Gardez à l'esprit qu'il s'agit d'un automate non déterministe. Celui que vous avez publié se révèle être déterministe, mais il ne doit pas rester de cette façon lorsque vous le transformez.
Prenez soin de vérifier quels états sont finaux. Cela peut aider à ne pas s'inquiéter de cela au début et à faire une grande boucle, puis à dupliquer les parties qui se terminent à mi-chemin de la boucle.
Ce n'est pas nécessairement la technique la plus efficace ou celle qui génère l'expression régulière la plus simple, mais c'est simple.
la source
la source
[(])
mais[()]
.