Adloun

informatique (MP2I/MPI) · Chapitre 29 · Exercice de TD

Un automate qui cherche un motif

Langages réguliers et automates finis · niveau 2

Énoncé

Construire l'automate déterministe qui reconnaît les mots contenant le facteur aba, sans passer par une expression régulière. Comment le modifier pour compter les occurrences, recouvrements compris ?

Corrigé

L'idée, et c'est la seule. L'état retenu est la longueur du plus long préfixe du motif qui soit un suffixe de ce qu'on a lu. Cette quantité est bornée par la longueur du motif, donc les états sont , et l'on pose

Le calcul donne, avec absorbant :

ce que signifie
rien de commencé
on a lu a
on a lu ab
motif trouvé (absorbant)

Noter et non : après aa, le plus long préfixe de aba qui soit un suffixe est a, de longueur . C'est là que le recouvrement se joue.

Pour compter, on rend l'état non absorbant en lui appliquant la même règle : après aba, le plus long préfixe de aba qui soit un suffixe de abaa est a, et de abab est ab. Donc et . On incrémente un compteur chaque fois qu'on entre en .

Mesures. La table absorbante a été comparée au prédicat « contient aba » sur les mots de longueur au plus : accord complet. La variante comptante trouve occurrences dans abababa, dans ababab, dans aabab, dans aaa — chaque fois le compte exact avec recouvrements.

Le coût. La recherche est en , une lecture par caractère, sans jamais revenir en arrière — ce qu'aucun des deux algorithmes du chapitre chap:textes ne garantit : la version simplifiée de Boyer-Moore reste en au pire, et Rabin-Karp n'est linéaire qu'en moyenne. Le prix est la table, en place.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre