Introduction Algorithmes sur les mots (séquences) Algorithmes sur les mots (textes, séquences, chines de crctères) Nomreuses pplictions : ses de données iliogrphiques ioinformtique (séquences de iomolécules) sécurité informtique Livres : M.Crochemore, C.Hncrt, T.Lecroq, Algorithmique du texte, Vuiert 2001 http://igm.univ-mlv.fr/~mc/chl/chl.html 701 702 Recherche d un motif dns un texte Recherche d un motif dns un texte T[1..n] texte P[1..m] motif Tâche : locliser toutes les occurrences de P dns T (vrintes : vérifier si P pprit dns T, compte le nomre d occurrences) T = P = Algorithme nïf : O(n m) T= = n P= = m-1 703 704
Recherche d un motif dns un texte Recherche d un motif dns un texte T = P = T = P = 705 706 Recherche d un motif dns un texte Recherche d un motif dns un texte T = P = T = P = 707 708
Recherche d un motif dns un texte Recherche d un motif dns un texte T = P = T = P = 709 710 Recherche d un motif dns un texte Recherche d un motif dns un texte T = P = T = P = 711 712
Recherche d un motif dns un texte Recherche d un motif dns un texte T = P = T = P = 713 714 Recherche d un motif dns un texte Recherche d un motif dns un texte T = P = T = P = 715 716
Recherche d un motif dns un texte Recherche d un motif dns un texte T = P = T = P = 717 718 Recherche d un motif dns un texte Recherche d un motif dns un texte T = P = T = P = 719 720
Recherche d un motif dns un texte Recherche d un motif dns un texte T = P = T = P = 721 722 Recherche d un motif dns un texte Recherche d un motif dns un texte Quelques oservtions : à chque ps on progresse d une lettre dns le texte l étt de l recherche est défini pr les positions dns le texte et dns le motif le déclge du motif est défini en fonction de l position d échec dns le motif et l lettre du texte qui provoqué l échec Quelques oservtions : à chque ps on progresse d une lettre dns le texte l étt de l recherche est défini pr les positions dns le texte et dns le motif le déclge du motif est défini en fonction de l position d échec dns le motif et l lettre du texte qui provoqué l échec T = * * * * * * * * = = = P = * * * * * T = * * * * * * * * = = = P = * * * * * Automte fini! 723 724
Recherche d un motif dns un texte Recherche d un motif dns un texte P utomte fini étt! préfixe de P (position) q! P q = P[1..q] q+1, si =P[q+1] "(q,)= mx{ i P i est un suffixe de P q } sinon P = 0 1 2 3 4 5 Algorithme qui en résulte : 1. Prétritement : clculer l utomte O(m A ) 2. Recherche : fire mrcher l utomte sur le texte O(n) But : otenir un lgorithme ne dépendnt ps de l tille d lphet Invrint: P q est le préfixe mximl de P qui est un suffixe de l prtie lue de T 725 726 Algorithme de Knuth-Morris-Prtt Algorithme de Knuth-Morris-Prtt T = * * * * = = = P = Quels sont les déclges possiles du motif? Fonction d échec (de supplénce) : f(q)=mx{ k k<q et P k =P[1..k] est un suffixe de P q } q f(q) P = c 0 1 2 3 4 5 6 7-1 0 0 1 2 3 0 1 727 728
Algorithme de Knuth-Morris-Prtt Algorithme de Knuth-Morris-Prtt q f(q) P = c 0 1 2 3 4 5 6 7-1 0 0 1 2 3 0 1 Automte de Knuth-Morris-Prtt c 0 1 2 3 4 5 6 7 Une fois l fonction f clculée KMP(T[1..n],f) j=0 /* pointeur dns P */ for i=1 to n do while j#0 nd P[j+1]$T[i] do j=f(j) endwhile j=j+1 if j==m then output(occurrence de P à l position (i-m)) j=f(j) endif endfor 729 730 Algorithme de Knuth-Morris-Prtt Algorithme de Knuth-Morris-Prtt Comment clculer l fonction d échec Clcul de l fonction d échec P i-1 i j 1 j 2 j 1 =f(i-1) j 2 =f(j 1 ) Décler le motif pr rpport à lui-même jusqu à ce que P[j q +1]=P[i] FE(P[1..m]) f[0]=-1 f[1]=0 k=0 for j=2 to m do while k#0 nd P[k+1]$P[j] do k=f(k) endwhile k=k+1 f(j)=k endfor 731 732
Algorithme de Knuth-Morris-Prtt Algorithme de Knuth-Morris-Prtt Version optimisée (KMP vs MP) Clcul de l fonction d échec optimisée h T = * * * * * = = P = c c h(3)=0 h fonction d échec optimisée q f(q) h(q) 0 1 2 3 4 5 6 7-1 0 0 1 2 3 0 1-1 0 0 0 0 3 0 1 déclge inutile FE(P[1..m]) h[0]=-1 h[1]=0 k=0 for j=2 to m do while k#0 nd P[k+1]$P[j] do k=h(k) endwhile k=k+1 f(j)=k if P[j] $P[k] then h(j)=h(k) else h(j)=k endfor 733 734 Algorithme de Knuth-Morris-Prtt Différence vec l pproche utomte : on peut «piétiner» sur une position de texte u plus log % m déclges sur une position, où %=(1+&5)/2 nomre d or Algorithme de Aho-Corsick Complexité mortie O(n) pour l recherche (KMP) O(m) pour le pré-tritement (FE) Historique : Morris-Prtt (1969), Knuth (1970) 735 736
Algorithme de Aho-Corsick Algorithme de Aho-Corsick Les idées de KMP peuvent se générliser pour l recherche simultnée de plusieurs motifs Algorithme de Aho-Corsick (1974) S={,, } rre digitl (trie) 0 1 2 3 4 5 6 7 737 Algorithme de Aho-Corsick Algorithme de Aho-Corsick S={,, } S={,, } rre digitl (trie) + fonction d échec rre digitl (trie) + fonction d échec + étts finux 0 1 2 3 4 5 6 0 1 2 3 4 5 6 7 7
Algorithme de Aho-Corsick S={,, } rre digitl (trie) + fonction d échec + étts finux = Automte de Aho-Corsick (AC) 0 1 2 3 4 7 L utomte de AC peut être construit en temps O(m) où m est l tille totle des mots de S 5 6 Algorithme de Krp-Rin (1987) 742 Algorithme de Krp-Rin Algorithme de Krp-Rin soit A={0,1,2,3,4,5,6,7,8,9} chque mot P[1..m] peut être encodé pr un nomre: p=p[1] 10 m-1 +P[2] 10 m-2 + +P[m-1] 10+P[m] p peut être clculé en temps O(m) vec le schém de Horner : p=p[m]+10 (P[m-1]+10 (P[m-2] + +10 (P[2]+10 P[1]) )) idée générle : comprer p successivement vec les codges t i de T[i..i+m-1], pour i=1..n-m+1 le pssge de t i à t i+1 se fit en temps constnt : t i+1 =10 (t i -10 m-1 T[i])+T[i+m] (en supposnt que 10 m-1 est pré-clculé) soit A={0,1,2,3,4,5,6,7,8,9} chque mot P[1..m] peut être encodé pr un nomre: p=p[1] 10 m-1 +P[2] 10 m-2 + +P[m-1] 10+P[m] p peut être clculé en temps O(m) vec le schém de Horner : p=p[m]+10 (P[m-1]+10 (P[m-2] + +10 (P[2]+10 P[1]) )) idée générle : comprer p successivement vec les codges t i de T[i..i+m-1], pour i=1..n-m+1 le pssge de t i à t i+1 se fit en temps constnt : t i+1 =10 (t i -10 m-1 T[i])+T[i+m] (en supposnt que 10 m-1 est pré-clculé) Prolème : les nomres mnipulés peuvent être très grnds Prde : mnipuler les nomres modulo q 743 744
Algorithme de Krp-Rin Algorithme de Krp-Rin on lors t i+1 =10 (t i -h T[i])+T[i+m] modulo q, où h=10 m-1 modulo q pssge de t i à t i+1 (illustrtion) : ttention, on peut voir des «fux positifs»! dès qu on trouve une fenêtre cndidte (t i =p), on vérifie en comprnt P et T[i..i+m-1] crctère pr crctère 745 746 Algorithme de Krp-Rin l lgorithme nécessite un pré-tritement en O(m) et mrche en temps O(mn) dns le pire des cs en moyenne il mrche en temps O(n + m (v+n/q)) où v est le nomre d occurrences du motif très fcile à implémenter, plus efficce que l lgorithme nïf 747