CSI2510 Structures de données et algorithmes Recherche des motifs

1
1
CSI2510
Structures de données et
algorithmes
Recherche des motifs
1
Exemples de chaînes (ou séquences) de caractères:
Programme Java
HTML document
séquence DNA
Image numérique
Un alphabet S est l’ensemble des caractères utilisés dans
les mots d’un texte; Exemple d’ alphabets:
ASCII
Unicode
{0, 1}
{A, C, G, T}
Chaînes de caractères (string)
2
CSI2510 - Motifs
Soit P une séquences de caractères de taille m
Une sous- séquence P[i .. j] de P est composée par les caractères entre i
et j
Un préfixe de P est une sous- séquence de type P[0 .. i]
Un suffixe de P est une sous- séquence de type P[i ..m - 1]
Étant donné deux séquences T (texte) et P (motif), le
problème de recherche du motif est de trouver une sous-
séquences de T égale à P
Applications:
Éditeurs de texte
Moteurs de recherche
Recherche biologique
a b a c a ca
c a a
3
CSI2510 - Motifs
Recherche de motif
L’algorithme de recherche de motif “brute force”
compare le motif P avec le texte T pour chaque décalage
de P relatif à T, jusqu’à ce que:
Une correspondance est trouvée ou
on a essayé toutes les possibilités
a b a c a ca
c a a
c a a
c a a
c a a
4
CSI2510 - Motifs
Recherche de motif : ‘Brute force’
2
Algorithm BruteForceMatch(T, P)
Input text T of size nand pattern
P of size m
Output starting index of a
substring of Tequal to P or 1
if no such substring exists
for i 0 to n m
{ test shift iof the pattern }
j 0
while ( j <m && T[i +j]=P[j])
j j +1
if j =m
return i {match at i}
return -1 {no match anywhere}
Temps d’execution: O(nm)
Exemples du pire cas:
T =aaa … ah et P =aaah
Il pourrait se présenter en
images et en séquences ADN
Rare dans les langues
naturelles
5
CSI2510 - Motifs
Algorithme exhaustif Force brute Algorithme de Boyer-Moore
Alphabet de taille moyenne et motif long
L’algorithme de recherche des motifs de Boyer-Moore
est basé sur deux heuristiques:
Heuristique Looking-glass:
Comparer P avec une sous-séquence de T en commençant
par la fin de P (jusqu’au premier caractère)
Heuristique character-jump:
Quand un “mismatch” arrive àT[i] = c (avec P[j])
– Si P contient c, décaler P pour aligner la dernière occurrence (la
plus à droite) de c en P avec T[i]
– Si P ne contient pas c, décaler P complètement après T[i]
6
CSI2510 - Motifs
Heuristique looking-glass:
1234
7
CSI2510 - Motifs
Algorithme de Boyer-Moore
Si P contient c, décaler P pour aligner la dernière occurrence (la
plus à droite) de c en P avec T[i]
a
x x
a b
Heuristique character-jump:
8
CSI2510 - Motifs
Algorithme de Boyer-Moore
3
a
x x
a b
Si c est à la fin de P (parmi les caractères déjà vérifiés) se déplacer
d’une seule unité (voir exemple plus tard)
Si P contient c, shift P pour aligner la dernière occurrence
(la plus à droite) de c en P avec T[i]
Heuristique character-jump:
9
CSI2510 - Motifs
Algorithme de Boyer-Moore
Si P ne contient pas c, décaler P pour aligner P[0] avec T[i + 1]
a
x x x b
Heuristique character-jump:
10
CSI2510 - Motifs
Algorithme de Boyer-Moore
a
xxxb
Si P ne contient pas c, décaler P pour aligner P[0] avec T[i + 1]
Heuristique character-jump :
11
CSI2510 - Motifs
Algorithme de Boyer-Moore
1
a p a t t e r n m a t c h i n g a l g o
r i t h m
T
P
r i t h m
12
CSI2510 - Motifs
Algorithme de Boyer-Moore
4
2
a p a t t e r n m a t c h i n g a l g o
r i t h m
T
P
r i t h m
13
CSI2510 - Motifs
Algorithme de Boyer-Moore
3
a p a t t e r n m a t c h i n g a l g o
r i t h m
T
P
r i t h m
14
CSI2510 - Motifs
Algorithme de Boyer-Moore
4
a p a t t e r n m a t c h i n g a l g o
r i t h m
T
P
r i t h m
15
CSI2510 - Motifs
Algorithme de Boyer-Moore
5
a p a t t e r n m a t c h i n g a l g o
r i t h m
T
P
r i t h m
16
CSI2510 - Motifs
Algorithme de Boyer-Moore
5
6
a p a t t e r n m a t c h i n g a l g o
r i t h m
T
P
r i t h m
17
CSI2510 - Motifs
Algorithme de Boyer-Moore
7
a p a t t e r n m a t c h i n g a l g o
r i t h m
T
P
r i t h m
891011
18
CSI2510 - Motifs
Algorithme de Boyer-Moore
mj
i
j l
.
. . . . . a. .
. . . . b a
. . . . b a
j
Cas 1: j 1+l
Algorithm BMMatch(T, P)
Input: Text T with n characters, pattern P with
m characters
Output: Starting index first substring of T
matching P, or indication there is no match
// last(c)=-1 si P ne contient pas c
i m1
j m1
repeat
if T[i]=P[j]
if j =0
return i {a match ! }
else
i i1
j j1
else {mismatch => a jump !}
i i+m – min(j, 1 + last(T[i]))
j m1
until i >n1
return There is no match”
m(1 +l)
i
j
l =
last
. . . . . . a. . . . . .
.a. . b.
.a. . b.
1+l
Cas 2: 1+lj
19
CSI2510 - Motifs
Algorithme de Boyer-Moore
1
a b a c a aba d ca b a c aba a b b
234
5
6
7
891012
a b a c a b
a b a c a b
a b a c a b
a b a c a b
a b a c a b
a b a c a b
1113
20
CSI2510 - Motifs
Algorithme de Boyer-Moore
1 / 10 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !