Você está na página 1de 64

Strings

(Casamento de padres)
Estrutura de Dados II
Jairo Francisco de Souza
2
Strings
Tipo de dado importante para diversas
aplicaes!
"#ordaremos algumas $uestes relacionadas
com Strings nos seguintes t%picos
& 'usca em Strings (String matc(ing)
& Codi)ica*o
& Compress*o
+
'usca em Cadeias de Caracteres
Dados a ser processados nem sempre se
decompem logicamente em registros
independentes com pe$uenas partes
identi)ic,veis
Este tipo de dados - caracterizado apenas pelo
)ato de $ue pode ser escrito como uma cadeia
.ma cadeia - uma se$/0ncia linear de
caracteres1 tipicamente podendo ser muito longa
2
'usca em Cadeias de Caracteres
Cadeias s*o centrais em sistemas de
processamento de te3tos1 recupera*o de
in)orma*o1 estudo de se$u0ncias de D4" em
#iologia computacional1 etc!
Esses o#5etos podem ser #em grandes e
algoritmos e)icientes s*o necess,rios para
manipul,6los

T 7 8"'"C""'"CC"'"C"'""''9

: 7 8"'"C"'9

8:9 - uma su#string de 8T91 mais e3atamente1


: 7 T;<=!!!<>?!
>
'usca em Cadeias de Caracteres

@utro tipo de cadeia - a cadeia binria

Cadeia #in,ria - uma se$/0ncia de apenas valores =


e <

Em certo sentido1 isso - simplesmente um caso


especial de cadeia de caracteres

Aas vale a pena )azer distin*o1 por$ue algoritmos


di)erentes s*o apropriados para cada caso

"l-m disso1 cadeias #in,rias aparecem naturalmente


em muitas aplicaes
&
:or e3emplo1 alguns sistemas gr,)icos
representam )iguras como cadeias #in,rias
B
'usca em Cadeias de Caracteres
Ceremos $ue o taman(o do al)a#eto a partir do
$ual os caracteres s*o tomados para )ormar
uma cadeia - um )ator importante no pro5eto de
algoritmos de processamento de cadeias
.ma opera*o )undamental so#re cadeias - o
casamento de padro:
& Dado uma cadeia de comprimento N e um padr*o de
comprimento M1 encontrar uma ocorr0ncia do padr*o
no te3to
Camos usar o termo texto para re)erenciar tanto
uma se$/0ncia de valores = e < $uanto
$ual$uer outro tipo especial de cadeia
D
'usca em Cadeias de Caracteres
" maioria dos algoritmos para o pro#lema
de casamento de padr*o pode ser
)acilmente estendida para encontrar todas
as ocorr0ncias do padr*o no te3to
@ pro#lema de casamento de padr*o
pode ser visto tam#-m como um
pro#lema de #usca com o padr*o sendo a
c(ave
E
.m 'reve Fist%rico
@ algoritmo mais %#vio de #usca em
cadeia1 c(amado algoritmo )ora6#ruta ou
algoritmo ing0nuo1 tem o pior caso de
tempo de e3ecu*o proporcional a MN
Em#ora as cadeias $ue aparecem em
muitas aplicaes levam a um tempo de
e3ecu*o $ue - virtualmente proporcional
a M G N
H
.m 'reve Fist%rico
Em <HD=1 S! "! CooI provou um resultado
te%rico so#re um tipo particular de autJmato $ue
implicava na e3ist0ncia de um algoritmo de
casamento de padr*o com tempo proporcional a
M G N no pior caso
D! E! Knut( e C! L! :ratt seguindo a constru*o
$ue CooI usara na demonstra*o do seu
teorema o#tiveram um algoritmo relativamente
simples e pr,tico
<=
.m 'reve Fist%rico
@correu tam#-m $ue J! F! Aorris desco#riu
praticamente o mesmo algoritmo como solu*o
de um pro#lema de edi*o de te3to
@s tr0s cientistas1 Knut(1 Aorris e :ratt1 n*o se
preocuparam em pu#licar o algoritmo at- <HDB
4esse meio tempo1 L! S! 'oMer e J! S! Aoore
(e1 independentemente1 L! N! Oosper)
desco#riram um algoritmo $ue - muito mais
r,pido em muitas aplicaes
Auitos editores de te3to usam esse algoritmo
para #usca de cadeias
<<
.m 'reve Fist%rico
Em <HE=1 A! @! La#in e L! A! Karp
desenvolveram um algoritmo t*o simples $uanto
o de )ora #ruta $ue roda virtualmente sempre
em tempo proporcional a M G N
"l-m disso1 o algoritmo deles estende6se
)acilmente a padres #idimensionais $ue o torna
mais Ptil $ue os outros para processamento de
)iguras
<2
"lgoritmo Fora6'ruta
@ m-todo %#vio para casamento de padr*o
resume6se em testar1 em cada posi*o do te3to
onde o padr*o pode casar1 se ele de )ato casa

@ proceedimento forcaBruta a seguir #usca


dessa maneira a primeira ocorr0ncia do padr*o
p no te3to t
<+
"lgoritmo Fora6'ruta
procedure ForcaBruta ( var T: TipoTexto ; var n : integer ;
var P: TipoPadrao; var m : integer ) ;
{ Pesquisa P[ 1 m! em T[ 1 n! "
var i # $ # % : &nteger ;
'egin
for i :( 1 to n m ) 1 do
'egin
% :( i ; $ :( 1;
*+i,e T[ % ! ( P[ $ ! do
'egin $ :( $ ) 1; % :( % ) 1; end;
if $ - m t+en *rite,n ( ./asamento na posicao . # i:0 ) ;
end;
end;
<2
"lgoritmo Fora6'ruta

<>
"lgoritmo Fora6'ruta
:ior caso
& @ pior caso ocorre $uando1 por e3emplo1 o
padr*o e o te3to s*o os dois uma se$/0ncia
de zeros seguidos por um <
& :or e3emplo1 ====< e =================<
& @u se5a1 $uando - preciso percorrer
praticamente todo : v,rias vezes a cada
posi*o de T1 estando : no )im da cadeia
& Comple3idadeQ mRn
<B
"lgoritmo KA:
" id-ia #,sica do algoritmo desenvolvido
por Knut(1 Aorris e :ratt -Q
& $uando um descasamento - detectado1 o
8)also comeo9 consiste em caracteres $ue 5,
con(ecemos de antem*o (por$ue eles est*o
no padr*o)
De alguma )orma1 podemos levar
vantagem desta in)orma*o ao inv-s de
retroceder o Sndice 5 por todos os
caracteres con(ecidos
<D
"lgoritmo KA:
Foi o primeiro algoritmo cu5o pior caso tem
comple3idade de tempo linear no taman(o
do te3toQ @(n)
T um dos algoritmos mais )amosos para
resolver casamento de padres
Tem implementa*o complicada e na
pr,tica perde em e)ici0ncia para outros
algoritmos1 como o de 'oMer!
<E
"lgoritmo KA:
@ algoritmo computa o su)i3o mais longo no
te3to $ue - tam#-m o pre)i3o de :!
Uuando o comprimento do su)i3o no te3to -
igual a V:V1 ocorre um casamento!
@ pr-6processamento de : permite $ue nen(um
caractere se5a ree3aminado!
@ apontador para o te3to nunca -
decrementado!
<H
"lgoritmo KA:
2=
"lgoritmo KA:
:or-m1 como sa#er $uantas posies
devem ser deslocadasW
:ara tal1 utilizamos uma )un*o c(amada
de Fun*o :re)i3o1 denotada por .
& :or en$uanto iremos considerar $ue essa
)un*o - con(ecida!
2<
Funo Prefixo
Tendo : 7 a#a#aca contra um te3to T.
Em (a) sendo1 q 7 >1 de caracteres
$ue parearam com T!
Con(ecendo estes q caracteres do
te3to - possSvel determinar $ue alguns
deslocamentos s s*o inv,lidos (n*o
precisam ser testados)!
@ deslocamento sX 7 s G < - inv,lido1
mas o deslocamento sX 7 s G 2 -
potencialmente v,lido pelo $ue
con(ecemos do te3to!
Dado $ue $ caracteres tiveram
comparaes com sucesso no
deslocamento s1 o pr%3imo potencial
deslocamento v,lido ser,Q
s = s + (q [q])
22
Fun*o :re)i3o
" )un*o pre)i3o encapsula o
con(ecimento so#re $uantas posies
deve6se camin(ar para continuar
procedendo o casamento do padr*o1
evitando comparaes inPteis!
:ara tal1 a )un*o analisa o padr*o
)ornecido e cria uma 8ta#ela9 de
deslocamentos!
Id-ia simples!
2+
Fun*o :re)i3o
Calores da )un*o pre)i3o para :Q
a # a # a c a
< 2 + 2 > B D
= = < 2 + = <
P
q

>
b
B
c
D
b
E
a
H
e
<=
b
<<
c
<2
b
<
b
2
c
+
b
2
a
< 2 + 2 = < 2 + = = < =
P
<+
a
2
q <2
b
<>
c
<B
b
> B D
a
E
=
Prefix
@utro e3emploQ
22
Caso importante
Considere o e3emplo a#ai3oQ
Uual o valor para :re)i3(<=)W
:re)i3(H)72! Aas P(2)YP(<=)!
:odemos concluir $ue :re)i3(<=)7=W
4*o1 n*o podemos!
>
a
B
g
D
c
E
g
H
c
<=
g c
< 2
g
+
c
2
g
P
i =
c
0 0 1 ! " # 0 1 0
Prefix
2>
Caso importante
E3iste um pre)i3o mais curto com taman(o
2 $ue - igual a um su)i3o de :(=1H)1 e
:(<=)7:(2)!
:odemos concluir $ue :re)i3(<=)72G<7+!
>
a
B
g
D
c
E
g
H
c
<=
g c
< 2
g
+
c
2
g
P
i =
c
0 0 1 ! " # 0 1 0
Prefix
2B
E3emplo
2D
"lgoritmo KA:
pu#lic static int KA:matc((String te3t1 String pattern) Z
int n 7 te3t!lengt(()[
int m 7 pattern!lengt(()[
int;? )ail 7 pre)i3Function(pattern)[
int i 7 =[
int 5 7 =[
\(ile (i ] n) Z
i) (pattern!c(ar"t(5) 77 te3t!c(ar"t(i)) Z
i) (5 77 m 6 <)
return i 6 m G <[ ^^ matc(
iGG[
5GG[
_
else i) (5 ` =)
5 7 )ail;5 6 <?[
else
iGG[
_
return 6<[ ^^ no matc(
_
pu#lic static int;? pre)i3Function(String pattern) Z
int;? )ail 7 ne\ int;pattern!lengt(()?[
)ail;=? 7 =[
int m 7 pattern!lengt(()[
int 5 7 =[
int i 7 <[
\(ile (i ] m) Z
i) (pattern!c(ar"t(5) 77 pattern!c(ar"t(i)) Z
)ail;i? 7 5 G <[
iGG[
5GG[
_
else i) (5 ` =) ^^ 5 )ollo\s a matc(ing pre)i3
5 7 )ail;5 6 <?[
else Z ^^ no matc(
)ail;i? 7 =[
iGG[
_
_
return )ail[
_
2E
"lgoritmo KA:
Como s*o evitadas comparaes em :1 o
algoritmo - e3ecutado em tempo
polinomial!
T )eito um pr-6processamento em :
& @(n)
T )eito um processamento em T
& @(m)
:rocessamento totalQ @(n G m)
2H
E3ercScio
Considere o te3to a#ai3oQ
"'"C""'"CC"'"C"'""''
:es$uise o padr*o "'"C"' utilizando o
m-todo KA:!
Diga $uantas comparaes o m-todo )az!
+=
"lgoritmo 'AF

Tam#-m c(amado de 'oMer6Aoore6Forspool!

:ela e3trema simplicidade de implementa*o e comprovada


e)ici0ncia1 o 'AF deve ser escol(ido em aplicaes de uso geral
$ue necessitam realizar casamento e3ato de cadeias!

" id-ia - pes$uisar no padr*o no sentido da direita para a


es$uerda1 o $ue torna o algoritmo muito r,pido!

E3ecutado )re$uentemente em editores de te3to para os


comandos de 8localizara e asu#stituira!

Ceremos primeiro o algoritmo 'A1 o algoritmo original!


+<
"lgoritmo 'A
@ algoritmo )az a varredura dos sSm#olos
do padr*o da direita para b es$uerda
(rightmost)! @ algoritmo utiliza duas
)unes pr-6processadas para deslocar o
padr*o b direita!
Estas )unes dos deslocamentos s*o
c(amadas )unes de ocorr0ncia e de
casamento!
+2
FeurSstica de ocorr0ncia

"lin(a a posi*o $ue causou a colis*o no te3to com o


primeiro caractere no padr*o $ue casa com este caractere[

E3!Q : 7Zcac#ac_1 T 7Zaa#caccac#ac_!


< 2 + 2 > B D E H = < 2
a a # c a c c a c # a c
c a c # a c
c a c # a c
c a c # a c
c a c # a c
c a c # a c
++
FeurSstica de ocorr0ncia
" partir da posi*o B1 da direita para a
es$uerda1 e3iste uma colis*o na posi*o 2
de T1 entre b do padr*o e c do te3to!
cogo1 o padr*o deve ser deslocado para a
direita at- o $ri%eiro carac&ere no
$a'ro que casa co% c!
@ processo - repetido at- encontrar um
casamento a partir da posi*o D de T!
+2
FeurSstica do casamento

"o mover o padr*o para a direita1 )aa6o casar com o


pedao do te3to anteriormente casado!

E3!Q : 7Zcac#ac_ no te3to T 7Zaa#caccac#ac_!


< 2 + 2 > B D E H = < 2
a a # c a c c a c # a c
c a c # a c
c a c # a c
c a c # a c
+>
FeurSstica do casamento

4ovamente1 a partir da posi*o B1 da direita


para a es$uerda1 e3iste uma colis*o na
posi*o 2 de T 1 entre o b do padr*o e o c do
te3to!

4este caso1 o padr*o deve ser deslocado


para a direita at- casar com o pedao do
te3to anteriormente casado1 no caso ac1
deslocando o padr*o + posies b direita!

@ processo - repetido mais uma vez e o


casamento entre : e T ocorre!
+B
Escol(a da (eurSstica

@ algoritmo 'A escol(e a (eurSstica $ue provoca o


maior deslocamento do padr*o!

Esta escol(a implica em realizar uma compara*o


entre dois inteiros para cada caractere lido do te3to1
penalizando o desempen(o do algoritmo com rela*o
ao tempo de processamento!

C,rias propostas de simpli)ica*o ocorreram ao longo


dos anos!

"s $ue produzem os mel(ores resultados s*o as $ue


consideram apenas a (eurSstica de ocorr0ncia!
+D
"lgoritmo 'AF

" simpli)ica*o mais importante - devida a


Forspool em <HE=!

E3ecuta mais r,pido do $ue o algoritmo 'A


original!

:arte da o#serva*o de $ue $ual$uer


caractere 5, lido do te3to a partir do Pltimo
deslocamento pode ser usado para enderear
a ta#ela de deslocamentos!

Enderea a ta#ela com o caractere no te3to


correspondente ao Pltimo caractere do padr*o!
+E
"lgoritmo 'AF & Ta#ela de
Deslocamentos

:ara pr-6computar o padr*o o valor inicial de todas as entradas


na ta#ela de deslocamentos - )eito igual a m!

" seguir1 apenas os m d < primeiros caracteres do padr*o s*o


usados para o#ter os outros valores da ta#ela!

Formalmente1
d;3? 7 min Z 5 tal $ue 5 7 m V (< e 5 ] m f : ;m d 5? 7 3) _!

E3!Q
&
:ara o padr*o : 7Zteste_1 os valores de d s*o d;t? 7 <1 d;e? 7 +1 d;s? 7 21
e todos os outros valores s*o iguais ao valor de V:V1 nesse caso m 7 >!
&
:ara o padr*o :7Z#ola_1 os valores de d s*o d;#? 7 +1 d;o? 7 21 d;l? 7 <1
d;a? 7 2!
+H
"lgoritmo 'AF
2=
"lgoritmo 'AF
;e?
2<
"lgoritmo 'AF
Z O C " T C O C " O " O " O T " T " C " O T " C O _
22
"lgoritmo 'AF
ac(oug
2+
"lgoritmo 'AF
22
Implementa*o
procedure BMH ( var T: TipoTexto ; var n : integer ;
var P: TipoPadrao ; var m: integer ) ;
{ Pesquisa P[ 1 m! em T[ 1 n! "
var i # $ # % : &nteger ;
d : arra' [ ( MaxTam)*+a,eto! o+ integer ;
,egin
{ Pre processamento do padrao"
+or $ :- ( to MaxTam)*+a,eto do d[ $ ! : - m;
+or $ :- ( to m./ do d[ ord(P[ $ ! ) ! : - m.$.1 ;
i : - m;
01i*e i 2- n do { Pesquisa"
,egin
% :- i ; $ : - m;
01i*e (T[ % ! - P[ $ ! ) and ( $ 3() do
,egin % : - %1; $ : - $ 1; end;
i+ $ - ( t1en 0rite*n ( 4 5asamento na posicao : 4 #%61:7);
i : - i 6 d[ ord(T[ i ! ) ! ;
end;
end;
2>
E3ercScio
Considere o te3to a#ai3oQ
"'"C""'"CC"'"C"'""''
:es$uise o padr*o "'"C"' utilizando o
m-todo 'AF!
Diga $uantas comparaes o m-todo )az!
2B
"lgoritmo 'FAS

SundaM (<HH=) apresentou outra simpli)ica*o importante para o


algoritmo 'A1 )icando con(ecida como 'AFS!

Cariante do 'AFQ enderear a ta#ela com o caractere no te3to


correspondente ao pr%3imo caractere ap%s o Pltimo caractere
do padr*o1 em vez de deslocar o padr*o usando o Pltimo
caractere como no algoritmo 'AF!

:ara pr-6computar o padr*o1 o valor inicial de todas as entradas


na ta#ela de deslocamentos - )eito igual a m G <!

" seguir1 os m primeiros caracteres do padr*o s*o usados para


o#ter os outros valores da ta#ela!
&
Formalmente d;3? 7 minZ5 tal $ue 5 7 m V (< e 5 e m f : ;m G < d 5? 7 3)_!

E3emploQ
&
:ara o padr*o : 7 teste1 os valores de d s*o d;t? 7 21 d;e? 7 <1 d;s? 7 +1
e todos os outros valores s*o iguais ao valor de V:V G <!
2D
Implementa*o
procedure BMH8 ( var T: TipoTexto ; var n : integer ;
var P: TipoPadrao ; var m: integer ) ;
var i # $ # % : &nteger ;
d : arra' [ ( Max51ar! o+ integer ;
,egin
{ Pre processamento do padrao"
+or $ :- ( to Max51ar do d[ $ ! : - m61;
+or $ :- ( to m.1 do d[ ord(P[ $ ! ) ! : - m $ ;
i : - m;
01i*e i 2- n do { Pesquisa"
,egin
% :- i ; $ : - m;
01i*e (T[ % ! - P[ $ ! ) and ( $ 3() do
,egin % : - % 1; $ : - $ 1; end;
i+ $ - ( t1en 0rite*n ( 45asamento na posicao : 4 # %61:7);
i : - i 6 d[ ord(T[ i 61!)!;
end;
end;
2E
Implementa*o
@ pr-6processamento do padr*o ocorre
nas duas primeiras lin(as do c%digo!
" )ase de pes$uisa - constituSda por um
lao em $ue i varia de m at- n1 com
incrementos d;ord(T;iG<?)?1 o $ue e$uivale
ao endereo na ta#ela d do caractere $ue
est, na i G <6-sima posi*o no te3to1 a
$ual corresponde b posi*o do Pltimo
caractere de : !
2H
E3emplo
2 + 2 <
[e]
+ > 2 2 < > > >
> > > > > > > >
>=
E3emplo
S(i)t para ;c? 7 2
S(i)t para ;c? 7 2
matc(g
><
"lgoritmo 'AFS
Em#ora normalmente utiliza6se a compara*o do
padr*o seguindo da direita1 ao contr,rio dos
algoritmos de 'A e 'AF1 o algoritmo de SundaM
pode comparar o padr*o de )orma ar#itr,ria!
Caso sai#a6se $ual o caracter menos comum no
padr*o1 ele pode ser utilizado primeiro na
compara*o
>2
E3ercScio
Considere o te3to a#ai3oQ
"'"C""'"CC"'"C"'""''
:es$uise o padr*o "'"C"' utilizando o
m-todo 'AFS!
Diga $uantas comparaes o m-todo )az!
>+
'A 6 "n,lise

@s dois tipos de deslocamento (ocorr0ncia e casamento) podem ser


pr-6computados com #ase apenas no padr*o e no al)a#eto!

"ssim1 a comple3idade de tempo e de espao para esta )ase - @(m


G c)!

@ pior caso do algoritmo - @(n G rm)1 onde r - igual ao nPmero total


de casamentos1 o $ue torna o algoritmo ine)icente $uando o nPmero
de casamentos - grande!

@ mel(or caso e o caso m-dio para o algoritmo - @(n^m)1 um


resultado e3celente pois e3ecuta em tempo su#linear!
>2
'AF 6 "n,lise
@ deslocamento de ocorr0ncia tam#-m
pode ser pr-6computado com #ase
apenas no padr*o e no al)a#eto!
" comple3idade de tempo e de espao
para essa )ase - @(c)!
:ara a )ase de pes$uisa1 o pior caso do
algoritmo - @(nm)1 o mel(or caso -
@(n^m) e o caso esperado - @(n^m)1 se c
n*o - pe$ueno e m n*o - muito grande!
>>
'AFS 6 "n,lise
4a variante 'AFS1 seu comportamento
assint%tico - igual ao do algoritmo 'AF!
Entretanto1 os deslocamentos s*o mais
longos (podendo ser iguais a m G <)1
levando a saltos relativamente maiores
para padres curtos!
:or e3emplo1 para um padr*o de taman(o
m 7 <1 o deslocamento - igual a 2m
$uando n*o (, casamento!
>B
"n,lise
>D
A-todo Lo#in6Karp

:rincSpioQ tratar cada su#string de taman(o A do te3to como c(ave de


uma ta#ela de dispers*o
&
padr*o - encontrado $uando a c(ave da su#string coincide com a do padr*o
&
como se procura c(ave especS)ica1 n*o - preciso guardar a ta#ela1 mas
apenas calcular as c(aves
&
com ta#ela virtualQ taman(o elevado reduz pro#a#ilidade de )alsas escol(as

:ara $ue o m-todo se5a e)icaz


&
c,lculo da c(ave deve ser menos pesado $ue )azer as comparaes
&
)un*o de dispers*oQ ((I) 7 I mod $ $ primo grande
&
c,lculo das c(avesQ c(ave da posi*o i usa a da posi*o i6<

A caracteres trans)ormam6se em nPmeroQ empacotados na m,$uina como palavra1 e


esta interpretada como nPmero
>E
:r-6processamento do padr*o
< H H < P
h 7 Z=1 <1 21 +1 21 >1 B1 D1 E1 H_ VV 7 <=
temosQ
(P;<? R <= G P;2?) 7 <H
(<H R <=) G P;+? 7 <HH
(<HH R <=) G P;2? 7 <HH<
OeneralizandoQ
P[m] + VhV (P[m(1]+ VhV (P[m(] + ... + VhV (P[] + VhV P[1]) ))
h 7 al)a#eto
VhV 7 taman(o de h
Dado um caractere1 a
representa*o num-rica
deste ser, sua posi*o
no al)a#eto h
Comple3idade O(m)
>H
:rocessamento do te3to
< E E D < H H < 2 = = = > Texto T Texto T
< H H < Padro P Padro P
< E E D 7 <EED tempo O(m)1 para s = 0
s = =1 temos O(m)
s > =1 temos O(1)
s variando de = b n m
para calcular VhV
m 6 <
temos O()g m)
= O(m) + (n m)O(1) + O()g m)
= O(n)
E E D < 7 EED< no usare%os &e%$o O(m)
$ara s * 01 pois temos $ueQ
(<EED & VhV
m 6 <
R :;<?) R VhV G P;sGm? 7 EED<1
ondeVhV
m 6 <
)oi previamente calculado
:ortanto temos tempo O(1)1 para cada
deslocamento s * 0
B=
A-todo Lo#in6Karp
"plicando a id-ia para caracteresQ
& "tri#uir nPmeros a cada letra (c%digo "SCII1
por e3emplo)
& "plicar (as(ing para a cadeia S;<1!!1m? na
#ase b (nPmero primo)
& :or e3emplo1 considerando a #ase como <=<
(a #ase pode ser o taman(o do al)a#eto)Q
:alavra 8(i97<=2i<=<
<
G <=>i<=<
=
7<=B=H
B<
A-todo Lo#in6Karp
+s ,a)ores 'as &ransfor%a-es 'e +s ,a)ores 'as &ransfor%a-es 'e P P e 'as e 'as
subs&rings 'e . so %ui&o gran'es/ quan'o subs&rings 'e . so %ui&o gran'es/ quan'o
m e | m e |01 so %ui&o )ongos 01 so %ui&o )ongos
2o)uo 13 2o)uo 13 reduzir esses valores a uma )ai3a controlada1 reduzir esses valores a uma )ai3a controlada1
utilizando m%dulo de um nPmero utilizando m%dulo de um nPmero q q1 por e3emplo! 1 por e3emplo!
4o,o $rob)e%a3 4o,o $rob)e%a3 um mesmo valor pode representar um mesmo valor pode representar
su#strings distintas! su#strings distintas!
2o)uo 3 2o)uo 3 ocorrendo um prov,vel casamento de ocorrendo um prov,vel casamento de P P com com
uma su#string uma su#string X X de de T T cada caractere de cada caractere de P P deve ser deve ser
comparado a cada caractere de comparado a cada caractere de X X para veri)icar se o para veri)icar se o
casamento realmente acontece! casamento realmente acontece!
B2
A-todo Lo#in6Karp
Implementa*o
& Calcular (as(ing(:"DL"@)
& Calcular (as(ing(Su#strings(TEjT@))
@p*oQ Ouardar em uma ta#ela
& :es$uisar (as(ing(:"DL"@) na ta#ela
Se n*o encontrar1 padr*o n*o e3iste no te3to
Se encontrar1
& Ceri)icar se Su#string(TEjT@) 7 :"DL"@
& Se )or di)erente1 padr*o n*o e3iste no te3to
B+
A-todo Lo#in6Karp
.sado para desco#rir casos de pl,gio
5n6)ise3 5n6)ise3
6 custo para pr-6processamento do padr*o P - O(m)
6 custo para processamento do te3to T - O(n)
6 nPmero m,3imo de deslocamentos s v,lidos - n m ! <
4o $ior caso3 4o $ior caso3
6 Todas as su#strings X de T casam com P
Sa#emos $ue o nPmero de deslocamentos s v,lidos - n m ! <1
ent*o temos s possSveis X sa#emos tam#-m $ue V X " = " P " = m -
possSvel concluir ent*o $ue para cada s )aremos m comparaes1
ent*oQ O((n-m+1)m).
B2
E3ercScio

"pli$ue o m-todo de Lo#in6Karp para criar a


ta#ela de (as(ing do te3to a#ai3o1
considerando um taman(o + de caracteres
pro (as(ing e um al)a#eto de taman(o 2D1
onde a letra " - denotada pelo nPmero <1 '
pela nPmero 21 C como +1 D como 21 etc!!!

Te3to 7 8"'C""'"C9

Como voc0 procuraria a e3ist0ncia do padr*o


"'" no te3toW

Você também pode gostar