Thierry Lecroq – Université de Rouen - 1
Algorithme de Boyer-Moore
Phase de recherche
Thierry Lecroq – Université de Rouen - 3
Fenêtre glissante
fenêtre
sens des décalages
Fenêtre glissante
Thierry Lecroq – Université de Rouen - 5
Fenêtre glissante
Algorithme de recherche de mot
Thierry Lecroq – Université de Rouen - 7
Algorithme de Boyer-Moore
tentative : compare les lettres du mot et les
lettres de la fenêtre, de la droite vers la
gauche, en commençant par la lettre la
plus à droite
Fenêtre glissante
sens des comparaisons
Thierry Lecroq – Université de Rouen - 9
Décalage
* +
# ' $ $%&& (
#,&& ')( + - +
# ' $ $%(
+
Décalage
* +
# ' $ $%&& (
#,&& ')( + - +
.
# ' $ $%(
+
Thierry Lecroq – Université de Rouen - 11
3 types de décalages
"
/
"
Décalage
0 - , '%-
% ∈
- "
, 1 $% # ' $%&& ' '%(
$% 1 #,&& ' '%(
Thierry Lecroq – Université de Rouen - 13
Décalage
0 - , '%-
% ∈
- - "
, 1 # ' (
1
Décalage
*
- , '%- ∈
- " 2 3 - - -
4
Thierry Lecroq – Université de Rouen - 15
algo BM( , , , ) -1
tantque < faire -1
tantque 0 et [ ] = [ - +1+ ] faire -1
SIGNALER-SI( < 0) si < 0 alors
+ ( ) sinon
+ ( , [ - +1+ ])
Décalage
0 -
, '% %
- "
, 1 # ' ( # (
1
Thierry Lecroq – Université de Rouen - 17
Décalage
*
- , '%
# ( " 2 3 - -
4
algo BM-FAIBLE( , , , ) -1
tantque < faire -1
tantque 0 et [ ] = [ - +1+ ] faire -1
SIGNALER-SI( < 0) si < 0 alors
+ ( ) sinon
+ # (
Thierry Lecroq – Université de Rouen - 19
Décalage
0
5 2 %-)-6- 4
7
# ( " 2 2 '%' 3 , 8 8 ')
# ( " 4 ∪ 2 44
∈
algo BM-FAIBLE-AVEC-DERN-OCC( , , , ) tantque -1 < faire
tantque -1 0 et [ ] = [ - +1+ ] faire SIGNALER-SI( < 0) -1
si < 0 alors
+ ( ) sinon
+ max{ # ( ,
[ [ - +1+ ]]}
Thierry Lecroq – Université de Rouen - 21
9 .
" ,- " #,(
∀ ∈
Phase de prétraitement : calcul de la table bon-suff
# (
# (
Thierry Lecroq – Université de Rouen - 23
Calcul de la table bon-suff
0
# ( " 3 - #,&& ( 3 : - "
+
algo SUFFIXES( , ) [ -1] -1
pour -2 à 0 faire
si > et [ + -1- ] - alors
# ( min{ [ + -1- ], - } sinon
min{ , }
tantque 0 et [ ] = [ + +1- ] faire -1
# ( '
Thierry Lecroq – Université de Rouen - 25
Invariants de l’algorithme SUFFIXES( , )
'%
, $ '%'
# (
Complexité de l’algorithme SUFFIXES( )
%
! ;<<=>? -
! &
@ .
&
@ . .
'% &
Thierry Lecroq – Université de Rouen - 27
Phase de prétraitement : calcul de la table bon-suff
%
# (
# ( %
% # (
Phase de prétraitement : calcul de la table bon-suff
%
# ( %
Thierry Lecroq – Université de Rouen - 29
algo BON-SUFFIXES( , ) 0
pour -2 à -1 faire
si = -1 ou [ ] = +1 alors tantque < -1- faire
[ ] -1- +1
pour 0 à -2 faire
[ -1- [ ]] -1-
retourner
Complexité de l’algorithme
BON-SUFFIXE( )
%
! A0B' ;<<=>? -
! &
') + '% C
, + '%' 2 4"
C
, + ') &
Thierry Lecroq – Université de Rouen - 31
Analyse de la phase de recherche
! D
- - "
. " ) - " E )&
F
A '<*=A!? -
# , + , .
G3"3 G ∈ B - B ' -
- +
" 2 $ 3 $ " G3"3- $ H , - G ∈ B 4& B
Lemme 3 : figure
" " " " " " " " " "
" "
" "
,
Thierry Lecroq – Université de Rouen - 33
Lemme 3 : preuve
" 3"3
# , &
" # ( . .
" # , ' $%$ ( / &
, " , ' &
- , , 8 # ' , $%&& ' , '%(
- , " # ' , ( / # ( " &
# ( 8 , &
Lemme 3 : figure
" " " " " " " " " "
" "
" "
,
,
Thierry Lecroq – Université de Rouen - 35
Lemme 3 : preuve
# ( 1 , # %
# , . .
&
; +
+ & I
# +
#,&& (- - / - " %" - % "-
% - E ) " &
Thierry Lecroq – Université de Rouen - 37
! J
= K ' G3"3
% 8 G 8 '% #&
Lemme 4 : preuve
&
# , + , " L'G , 3 3
% 8 G , 8 '%
%" 'G
,#,&& , (
%" 'G
,, " '3%3' 'G , 3"3
" # ( HG 3"3&
Thierry Lecroq – Université de Rouen - 39
Lemme 4 : figure
" "
" " " " " "
"
"
" "
" "
,
"
,"
"
"
" " " " " "
" "
" " " " "
%
%
%
%
%
,
#
#
#
,#
,Lemme 4 : preuve
M 3"3
. " &
M 3"3
# , ( HG , 3 3 . .
# +
: & I
Thierry Lecroq – Université de Rouen - 41
Lemme 5
! N
* # K
G . '3 3$3"3 8 G 8 L'3"3&
! J ' G3"3
% 8 G 8 '%&
! D +
'3 3$3"3 '3"3
+ ' G3"3 % 8 G 8 '%& I
Corollaire 6
@ O
* # D3"3'D
K + &
! N #
. P
. +
# '3 3$%- '3 3$3"3'%(
Thierry Lecroq – Université de Rouen - 43
Corollaire 6 : preuve
@ " -
3"3 &
F : D 3"3'% L+ & I
Corollaire 6 : figure
" " " " " "
%
3"3'%
3"3'%
3"3'%
Thierry Lecroq – Université de Rouen - 45
Théorème 7
M Q
!
. H R D
- A '<*=A!?
J
&
Théorème 7 : preuve
# + -
. &
B
# D $ &
Thierry Lecroq – Université de Rouen - 47
Théorème 7 : preuve
" - #,&& ( &
3 3 8 D -
# 3 3$%
# ( # E % &
F - - 3 3$% 8 D $ &
Théorème 7 : preuve
3 3 HD - . "%" - #,&& (-
- / - 8 )- % " E 3"3&
@ O D3"3'D L+
E 3 3'D3"3$D E 3 3'D $D
: 3 3$% 8 D $3 3'D $D " 3 3$D 8 D $ &
Thierry Lecroq – Université de Rouen - 49
Améliorations
. .
. S T
#U %VQV( ! &
algo GALIL( , , , )
G 0
tantque -1 < faire
tantque -1 et [ ] = [ - +1+ ] faire SIGNALER-SI( < 0) -1
si < 0 alors
G '
+ ( ) sinon
G 0
+ max{ # ( , [ [ - +1+ ]]}
Thierry Lecroq – Université de Rouen - 51
Améliorations
# K ),,D( . S
T . + . .
+
J &
algo SMYTH( , , , )
G 0
tantque -1 < faire
tantque -1 et [ ] = [ - +1+ ] faire SIGNALER-SI( < 0) -1
si < 0 alors
G '
+ ( ) sinon
si [ ] > et [ ] > [ [ - +1+ ]] alors
G ' [ ]
sinon
G 0
Thierry Lecroq – Université de Rouen - 53
Améliorations
M;9A0' A #@@UW! 9 %VVJ(
F
C
' &
saut
'
'
'
Thierry Lecroq – Université de Rouen - 55
turbo décalage : si | | < | ' |
'
'
'
turbo-d calage
turbo décalage : si | | < | ' |
" # ' && (
' ' ' '
' '
" 3 3 '
+ '
+ 3 '3'3 3&
Thierry Lecroq – Université de Rouen - 57
algoTURBO-BM( , , , ) 0
-1 0
tantque < faire -1
tantque 0 et [ ] = [ - +1+ ] faire si i = m-dalors
- -1 // saut
sinon
SIGNALER-SI( < 0)-1 si < 0 alors
sinon -
- +1+
si ( [ ] alors [ ]
min{ - , - } sinon
max2 - ' '%4 + 0
Algorithme TURBO-BM
@ )
&
Thierry Lecroq – Université de Rouen - 59
Améliorations
)# '( " ⇔
# ( " #,&& (-
1 # ' && '%( " # '' $%&& '( # ' '%( / # '' (
" " # '' $%&& '(
'
)# '(
? # (
Thierry Lecroq – Université de Rouen - 61
J
%
# ( 8 )# '( # ( " $% )# ( " "
'
)# '(
# (
Thierry Lecroq – Université de Rouen - 63
J
)
# ( 1 )# '( # ( 8 )# ( " % * # (
" # # ((
'
)# '(
# (
Thierry Lecroq – Université de Rouen - 65
J
D
# ( H )# '( # ( 8 )# ( " % *)# '(
" # )# '((
'
)# '(
# (
Thierry Lecroq – Université de Rouen - 67
J
J
# ( " )# '(
'
)# '(
# (
Thierry Lecroq – Université de Rouen - 69