• Aucun résultat trouvé

Algorithmique 4. Cours 3

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithmique 4. Cours 3"

Copied!
31
0
0

Texte intégral

(1)

Algorithmique 4. Cours 3

Marie-Pierre B´eal d’apr`es Maxime Crochemore

http://www.dcs.kcl.ac.uk/staff/mac/TSP/index.html

Recherche d’un motif dans un texte

(2)

Chaˆınes de caract`eres

Alphabet : un ensemble fini de lettres. A={a,b,c, . . . ,}.

Mots : A suites finies de lettres. Le mot vide est not´eε.

La longueur d’un mot x est not´ee|x|.

Notation x=x[0]x[1]· · ·x[|x| −1] =abaaabababa.

i 0 1 2 3 4 5 6 7 8 9 10

x[i] a b a a a b a b a b a

(3)

Chaˆınes de caract`eres

Pr´efixe : x est pr´efixe dey s’il existe un mot z tel quey =xz.

Suffixe : x est suffixe de y s’il existe un mot z tel quey =zx.

Facteur : x est facteur dey s’il existe des mot z,t tel quey =zxt.

Positions : x apparaˆıt dansy en positioni si y =uxv et|u|=i, ou encore si x =y[i]y[i + 1]...y[i+|x| −1] =y[i,i+|x| −1].

(4)

P´eriodes et bords

Soit x un mot non vide etp un entier tel que 0<p ≤ |x|.

p est une p´eriode dex si l’une des conditions ´equivalentes suivantes est satisfaite.

1 x[i] =x[i+p], pour 0i <|x| −p.

2 x est pr´efixe deyk, pour un entierk>0,|y|=p.

3 x =yw =wz, pour des motsy,z,w avec|y|=|z|=p. Une telle chaˆıne w est appel´ee unbordde x.

La p´eriode dex,period(x), est sa plus petite p´eriode (peut ˆetre

´egale `a |x|).

Le bord dex est son plus long bord (peut ˆetre le mot vide) P´eriodes et bords de abacabacaba

4 abacaba

8 aba

10 a 11 ε

(5)

Recherche d’un motif dans un texte

texte

pattern

position de l’occurrence

Probl`eme

Trouver toutes les occurrences du motif (ou pattern)x de longueurm dans le textey de longueurn.

Plusieurs solutions selon que l’on consid`ere que

Le pattern est fix´e : solutions avec un pr´e-traitement du pattern.

Le texte est fix´e : solutions bas´ees sur la construction d’un index.

(6)

”Pattern matching”

Etant donn´e un pattern´ x, trouvertoutes les positions dex dans n’importe quel texte y.

Pattern : une suite x dem symboles.

t a t a

Texte : une suite y den symboles.

c a c g t a t a t a t g c g t t a t a Occurrences en positions 4, 6, 15.

c a c g t a t a t a t g c g t t a t a

t a t a t a t a

t a t a

Op´eration de base: comparaison de symboles (=,6=)

(7)

Strat´egie de la fenˆetre glissante

textey

patternx

fenˆetre

scan . . . scan . . . scan

ecalage ecalage

Scan et d´ecalage de la fenˆetre

mettre la fenˆetre au d´ebut du texte whilefenˆetre est sur le texte do

scan:iffenˆetre = patternthen enregistrer une occurrence d´ecalage: d´ecaler la fenˆetre vers la droite et m´emoriser des informations pour les scans et d´ecalages futurs

(8)

Algorithme na¨ıf

c a c g t a t a t a t g c g t t a t

t a t a

Principe

On ne m´emorise rien. On d´ecale de 1 position `a droite Complexit´e

temps O(m×n), espace suppl´ementaireO(1) Nombre de comparaisons de symboles

au maximum≈m×n en moyenne ≈2×n

sur un alphabet `a deux lettres avec des sources sans m´emoire

´equiprobables et ind´ependantes.

(9)

Algorithme na¨ıf

u u

τ

0 σi m1

0 pos j n1

y

x

RechercheNa¨ıve (stringx,y; integerm,n) pos ←−0

whilepos ≤n−m do i ←−0

whilei <m and x[i] =y[pos +i]do i ←−i + 1

ifi =m then output(”x apparaˆıt dansy en position”,pos) pos ←−pos+ 1

(10)

Recherche du motif avec un automate

(11)

On utilise l’automate d´eterministe minimal A(x) acceptantAx, o`u Aest l’alphabet de y

Exemple x =abaa,A={a,b}

0 a 1 b 2 a 3 a 4

b a

b b

b a

Recherche de abaadans

b a b b a a b a a b a a b b a ·

´etat 0 0 1 2 0 1 1 2 3 4 2 3 4 2 0 1 ·

(12)

Algorithme de recherche du motif

Simple scan du texte avec l’automate A(x)

RechercheParAutomate (stringx,y; integerm,n) (Q,A,initial,{terminal}, δ) est l’automateA(x) q←− ´etat initial

ifq est terminal then enregistrer une occurrence dex dansy while notfin de y do

σ←− symbole suivant de y q ←−δ(q, σ)

ifq est terminal then enregistrer une occurrence dex dansy

(13)

Construction de l’automate A( x )

automate ConstructionAutomate(string x) Soitinitial un nouvel ´etat

Q←− {initial} terminal ←−initial

forallσ in Ado δ(initial, σ)←−initial while notfin de x do

τ ←− symbole suivant de x r←−δ(terminal, τ)

ajouter un nouvel ´etats `aQ δ(terminal, τ)←−s

forallσ inA doδ(s, σ)←−δ(r, σ) terminal ←−s

return(Q,A,initial,{terminal}, δ)

(14)

Complexit´e

Pattern x de taille m, texte y de taille n

Avec un automate impl´ement´e par matrice de transitions Pr´e-traitement de x temps O(m×card(A))

espace O(m×card(A))

Recherche dans le texte y temps O(n)

espace O(m×card(A))

D´elai temps constant

Am´elioration (plus difficile)

On peut calculer l’automate A(x) en temps et espace O(m) ind´ependamment de la taille de l’alphabet.

Animation de Thierry Lecroq

http ://www.dcs.kcl.ac.uk/staff/mac/TSP/DOC/Thierry-Lecroq- sma.pdf

(15)

Algorithme de Boyer-Moore

(16)

Rappel : l’algorithme na¨ıf fait un scan de gauche `a droite

a a c a a a a a b a b a a b a b . . a b a a a a

a b a a a a a b a a a a

a b a a a a a b a a a a

. . .

(17)

Scan de droite `a gauche : exemple 1

a a c a a a a a b a b a a b a b . . a b a a a a

a b a a a a a b a a a a

a b a a a a a b a a a a

. . .

(18)

Scan de droite `a gauche : exemple 2

a b a b a a a b a b b a a b a b . . a b a a a b a b

a b a a a b a b a b a a a b a b

a b a a a b a b . . .

(19)

Scan de droite `a gauche et d´ecalage

texte · · · c g c t c g c g c t a t c g · · ·

pattern c g c t a g c

c g c t a g c

c g c t a g c

r`egle de d´ecalage (fonction d) dite du ”bon suffixe”

r`egle de d´ecalage dite du ”mauvais caract`ere”

whilefenˆetre est sur le texte do

u←− plus long suffixe commun `a fenˆetre et pattern ifu= pattern thenenregistrer une occurrence d´ecaler la fenˆetre ded(u) positions `a droite

(20)

u u u τ σ i

? pos

textey

patternx ecalage

u u τ σ i pos

textey

patternx ecalage

Pr´e-calcul des occurrences les plus `a droite des motsu :O(m) Le d´ecalage de type 2 est la p´eriode de x

Le tableau D impl´emente une r`egle de d´ecalage dite r`egle ”du bon suffixe” :

d´ecalage=d(u) =D[i]

(21)

Algorithme de Boyer-Moore (r`egle ”du bon suffixe”)

u u τ σ

0 i m1

0 pos j n1

textey

patternx

BM(stringx,y; integer m,n) pos ←−0

whilepos ≤n−m do i ←−m−1

whilei ≥0 andx[i] =y[pos +i] doi ←−i−1 ifi =−1then

output(”x apparaˆıt dansy en position”,pos) pos ←−pos+period(x)

else

pos ←−pos+D[i]

(22)

Calcul du d´ecalage

Fonction de d´ecalage d :

d(u) = min{|z|>0|(x suffixe deuz) ou

(τuz suffixe dex et τu n’est pas suffixe de x, pourτ ∈ A)}

Tableau des d´ecalages D :

D[i] =d(x[i + 1,m−1]), pouri = 0, ..,m−1

x σ u

z′′

τ u

z u

Note 1 : u est un bord de uz′′

Note 2 : |z|est une p´eriode de uz (et donc |z|est une p´eriode de x)

(23)

Complexit´e de Boyer-Moore Phase de pr´e-traitement

calcul du tableau D O(m) (voir plus loin) Phase de recherche (de toutes les occurrences)

temps de calcul O(n×m)

nombre minimum de comparaisons n/m nombre maximum de comparaisons n×m

(24)

Calcul de la table des suffixes

Calcul d’un tableau Sufde taille m

Suf[i] = longueur du plus long suffixe dex qui est un bloc se terminant en position i dans x

Suf[i] i patternx

Complexit´e

La complexit´e en temps et espace du calcul deSuf sur un pattern de taillem est O(m).

(25)

i fix´e :Suf[j] connu pouri <j ≤m−1

k = min{j −Suf[j]|i <j <m} (pos. la plus `a gauche d´ej`a vue) σ 6=τ;σ 6=τ;Suf[i+m−j −1] =|u|

0 k i j i+mj1 m1

x τ u σ u

τ u τ u σ u

Si Suf[i+m−j−1]<i−k :Suf[i] =Suf[i+m−j −1]

0 k i j i+mj1 m1

x τ u σ u

u τ u σ u

Si Suf[i+m−j−1]>i−k :Suf[i] =i−k

0 k i j i+mj1 m1

x τ u σ u

u σ u σ u

Si Suf[i+m−j−1] =i−k : trouverSuf[i] en scannant`a partir de la position k. Donne un nouveau k et un nouveau j (=i)

(26)

Calcul linaire du tableau Suf , puis de D `a partir de Suf

Compute Suf(stringx; integerm)

Suf[m−1]←−m;k ←−m−1 ; j ←−m−1 ; fori ←−m−2 downto0 do

ifi >k andSuf[i+m−j−1]6=i −k then Suf[i]←−min{Suf[i +m−j −1],i−k}

else

j ←−i;k ←−min{i,k};

while k ≥0 andx[k] =x[k+m−j −1] do k ←−k−1 ;

Suf[i]←−j−k returnSuf

(27)

i 0 1 2 3 4 5 6 7 8 9 10

x[i] a b a a a b a b a b a

Suf[i] 1 0 3 1 1 0 3 0 5 0 11

Initialisation deD en utilisant les p´eriodes de x

Suf[2] = 3 =⇒ p´eriode 8 ; Suf[0] = 1 =⇒ p´eriode 10 ; p´eriode 11

8 8 8 8 8 8 8 8 10 10 11

Calcul du tableauD `a partir de Suf

Suf[3] = 1 =⇒ D[9]≤7 ; Suf[8] = 5 =⇒D[5]≤2

8 8 8 8 8 /8 8 /8 10 //10 //11

2 /8 //10 /9

4 7/ /5

6 /3 1

D[i] 8 8 8 8 8 2 8 4 10 6 1

(28)

Calcul de D `a partir de Suf

Compute D(stringx; integerm; table D) j ←−0 ;

fori ←−m−2 downto−1 do ifi =−1orSuf[i] =i+ 1then

while j <m−i−1do D[j]←−m−i−1 ; j ←−j+ 1 ;

fori ←−0 tom−2 do

D[m−Suf[i]−1]←−m−i−1 ; returnD

(29)

Algorithme de Boyer-Moore Horspool

Le d´ecalage de la fenˆetre est contrˆol´e par la r`egle dite du ”mauvais caract`ere”.

z u u τ σ i τ pos

textey

patternx ecalage

DA[τ]

On d´efinit une tableDA indic´ee par les caract`eres.

La table DAv´erifie :

DA[τ] = min{|z|>0|τz suffixe dex} ∪ {|x|}

d´ecalage=DA[τ]− |u|=DA[τ]−m+i+ 1

(30)

Algorithme de Boyer-Moore Horspool

Calcul de la tableDA

Compute DA(stringx; integerm) forallσ in Ado

DA[σ] =m

fori ←−0 tom−2 do DA[x[i]] =m−i −1 returnDA

(31)

Algorithme de Boyer-Moore

BM(stringx,y; integer m,n) ; pos ←−0

whilepos ≤n−m do i ←−m−1

whilei ≥0 andx[i] =y[pos +i] do i ←−i −1

ifi =−1then

output(’x occurs in y at position ’, pos) pos ←−pos+period(x)

else

pos ←−pos+ max{D[i],DA[y[pos+i]]−m+i+ 1}

Références

Documents relatifs

Tant que les hommes se contentèrent de leurs cabanes rustiques, tant qu’ils se bornèrent à coudre leurs habits de peaux avec des épines ou des arêtes, à se parer de

En déduire que (CD) // (AB) et que les triangles IAB et ICD sont équilatéraux. Montrer que B est le milieu de [IF], puis en déduire que BE = r. M est un point de [BC] et N est le

[r]

Allumer la lampe Rouge Allumer la lampe Verte Allumer la lampe Bleue Allumer les lampes Rouge et Verte. Allumer les lampes Rouge

Vous pourriez écrire une suite de if ou différentes entrées d’un switch qui, suivant le nombre entré, appelleraient une fois printf() , puis deux fois, puis trois fois, etc.

Entoure en rouge les animaux qui se dirigent vers

Elle peut prendre un argument numérique indiquant le nombre de boucles à sauter, dans le cadre de boucles imbriquées (rapidement illisible). Elle peut prendre un argument

[r]