• Nenhum resultado encontrado

(V ( VS SH HF FL LI IL L F F D D om o mR R

N/A
N/A
Protected

Academic year: 2023

Share "(V ( VS SH HF FL LI IL L F F D D om o mR R "

Copied!
22
0
0

Texto

(1)

Ca C ap í t t u u lo l o 2 2 : : Co C on n co c o rd r d ân â n ci c i a a de d e Mo M o d d el e l os o s

(p(peessqquuiissaa dede papadrdrõeõess))(p(paatttteernrn mamattcchihinngg))

(PJUDQGHSDUWHGRVFDVRVGHSHVTXLVDRTXHVHSUHWHQGHHQFRQWUDUQmRp XPHOHPHQWRVLPSOHVPDVVLPXPDGHWHUPLQDGDVHTXrQFLD

❒❒

3U 3 UR R EO E O HP H P D D

1XPDFDGHLDGHFDUDFWHUHVSURFXUDURFRUUrQFLDV

FRQFRUGkQFLDVGHXPGDGRSDGUmRPRGHOR

p r o c u r a r o m o d e l o c a s o e x i s t a

XPDFRQFRUGkQFLDRFRUUHDSDUWLUGHL

ƒƒ $$SSOOLLFFDDoo}H}HVV 7RGRRWLSRGHSHVTXLVDVHPHVWUXWXUDVVHTXHQFLDLV SDODYUDVRXIUDVHVHPWH[WRV

VXEOLVWDVHPOLVWDV

SURFHVVDGRUHVGHWH[WRPRWRUHVGHEXVFD

ELRORJLDPROHFXODUELEOLRWHFDVGLJLWDLVFULPLQRORJLD

ILOWURVGHVSDP LPDJHQVGLJLWDLV

❒❒

(V ( VS SH HF FL LI IL L F F D D om o mR R

'D'DGGRRVV FDGHLD s[1..n]

SDGUmR p[1..m] ( onde n >> m ) 5H5HVVXXOOWWDDGGRR ORFDOL]DomRGRLQtFLRGRSDGUmRQDFDGHLD

{ i ± [1..n] : k ±[1..m] Á s[i + k – 1] = p[k] }

(2)

❒❒

6R 6 RO OX Xo om m R R 7 7 UL U L YL Y L D D O O

,UGHVORFDQGRRPRGHORDRORQJRGDFDGHLD

FRPSDUDQGRFDUDFWHUDFDUDFWHU

L‘ Q

a b c a b c a b d a b c

IDOKRXSDUDN

IDOKRXSDUDN IDOKRXSDUDN FRQFRUGkQFLD

ƒƒ &&RRPPSOSOHH[[LLGGDDGGHH GDGD 6R6ROOXXoomRmR 77ULULYYLLDDOO

1RSLRUFDVRVmRUHDOL]DGDVP l Q FRPSDUDo}HV

4XDODLQVWkQFLDTXHJHUDRSLRUFDVR"

4XDLVVmRRVPRGHORV³GLItFHLV´"

1HFHVVLGDGHGHXPDOJRULWPROLQHDUHPQ

N‘ P

a b c a b d a b c

a b c a b d a b c

a b c a b d a b c

a b c a b d a b c

(3)

{ solução trivial }

SURFHGXUH PesquisarModelo ( s, p : cadeia; m, n : integer;

YDU indice : integer; YDU achou : boolean);

YDU i, j, k : integer;

iguais : boolean;

EHJLQ i := 0;

achou:= IDOVH;

ZKLOH QRW achou DQG ( i < n–m+1) GR

EHJLQ { QmR começa em [1..i–1] H achou = (começa em i) } { QmR começa em [1..i] }

{ avançar modelo na cadeia } i = i + 1;

k := 0;

iguais := WUXH;

ZKLOH iguais DQG ( k < m ) GR

EHJLQ { concordância até k–1

Higuais = (s[i + k – 1] = p[k]) } { concordância até k }

{ avançar no modelo } k := k + 1 ;

iguais := s[i + k –1] = p[k]

{ concordância até k–1

Higuais = (s[i + k – 1] = p[k]) } HQG;

{ QmR iguais RX (k • P} { iguais = (s[i + k – 1] = p[k]) } achou := iguais

{ QmR começa em [1..i–1] Hachou = (começa em i) } HQG;

{ achouRX (i •n–m+1) } { achou = (começa em i) }

{ achou = ( i± [1..n] : k± [1..m] Á s[i + k – 1] = p[k]) } LI achou

WKHQ indice := i { indice ± [1..n] : k± [1..m] Á s[indice + k – 1] = p[k]) } HOVH indice := 0 { indice ² [1..n] }

HQG

(4)

❒❒ $O

$

OJJRRUL

U

LWWPPRR GH

G

H .Q

.

QXXW

W

K

K

±

±

0R

0

RUUUULLVV ±

±

3

3

UD

U

DWWWW .

.0033

ƒƒ $$ LGLGHHLLDD

$QDOLVHPRVXPH[HPSORGRSLRUFDVR

Q

V a a a a a a a a a a a a a a a a a a a a b S a a a a a b

a a a a a b

P

6HULDPHIHFWXDGDVQ±Pl P FRPSDUDo}HV $SyVDFRPSDUDomRV>@S>@

RDOJRULWPRWULYLDODYDQoDULDRSDGUmRHYROWDULDDFRPSDUDU

V>@ S>@V>@ S>@V>@ S>@V>@ S>@V>@ S>@

'HYHULDFRPSDUDUDSHQDVV>@ S>@

3UHWHQGHPRVXPDOJRULWPRRQGHFRQFRUGkQFLDVDQWHULRUHVQmR YROWHPDVHUWHVWDGDV6yDVVLPSRGHUiVHUOLQHDUHPQ

2VFDVRV³PDXV´VmRSURYRFDGRVSRUFRQFRUGkQFLDVSDUFLDLV

$VFRQFRUGkQFLDVSDUFLDLVVmRSURYRFDGDVSRUUHSHWLo}HV GHQWURGRPRGHOR

3UHWHQGHPRVXPDOJRULWPRTXH³FRQKHoD´DVUHSHWLo}HV H[LVWHQWHVQRPRGHOR

(5)

&RPRUHJLVWDUDVUHSHWLo}HV"

9ROWDQGRDRSULPHLURH[HPSOR

L

V ... a b c a b c a b d a b c ...

S a b c a b d a b c

N

$SyVDFRPSDUDomRV>L@S>@RDOJRULWPR GHYHULDFRPSDUDU V>L@ S>@

3RUTXHQRSDGUmRH[LVWHPDVUHSHWLo}HVS>@ S>@HS>@ S>@

$V5HSHWLo}HVHPSYmRVHUUHJLVWDGDVQXPYHFWRUDX[LOLDU

S

D E F D E G D E F

5

0 0 0 1 2 0 1 2 3

S>@ S>@Á 5>@

S>@ S>@Á 5>@

S>@S>@Á 5>@

S>@ S>@Á 5>@

S>@ S>@Á 5>@

S>@ S>@Á 5>@

(6)

S

D D D D D E

5

0 1 2 3 4 0

S>@ S>@ S>@ S>@ S>@

ƒƒ $$OOJJRRUULWLWPPRR SDSDUUDD DD FRFRQVQVWWUUXXoommRR GRGR YHYHFFWWRRUU 55

R[1]



0 k



1

para i = 2 .. m

se p[i] = p [k]

então R[i]



k k



k + 1 senão R[i]



0

k



1

SURFHGXUH construirR ( p : cadeia; m : integer; YDU R : vector);

YDU i, k : integer;

EHJLQ IRUi := 1 WR m GR

R[i] := 0;

k := 1;

IRUi := 2 WR m GR

LIp[i] = p[k]

WKHQEHJLQ R[i] := k;

k := k + 1

HQG

HOVH k := 1

HQG; { construirR }

(7)

ƒƒ 22 DODOJJRRUULLWPWPRR .0.033

6HIRLYHULILFDGDXPDGHVLJXDOGDGHSDUDN

L

... D E F D E F D E G D E F ...

S

D E F D E G D E F

R PRGHORDYDQoDQDFDGHLDFRQWLQXDQGRN

i



i + 1

&RPRFRQWLQXDURSURFHVVRDSyVXPDFRQFRUGkQFLDSDUFLDO"

6HIRLYHULILFDGDXPDLJXDOGDGH

s[i] = p[k]

FRPRSDUDN

... D E F D E F D E G D E F ...

S

D E F D E G D E F

GHYHUmRVHUFRPSDUDGRVRVGRLVFDUDFWHUHVVHJXLQWHV

i



i + 1

k



k + 1

(8)

6HIRLYHULILFDGDXPDGHVLJXDOGDGH

s[i]

 S>N@ WDOFRPRSDUD N

S

D E F D E G D E F

5

0 0 0 1 2 0 1 2 3

N ‘

e QHFHVViULRUHJUHVVDUDRFDUDFWHU³FRUUHVSRQGHQWH´QRVXE SDGUmRDQWHULRU2XVHMD

k



R[k-1] + 1

( SURFHVVRFRQWLQXDULDSDUDRPHVPRL YROWDQGRDFRPSDUDU V>L@FRPS>N@

3DUDRRXWURH[HPSOR

S

D D D D D E

5

0 1 2 3 4 0

N ‘

(9)

( PDLVXPH[HPSOR

L

... D F E D F E D F E ...

S

D E D E F G

5

0 0 1 2 0 0

N ‘

V>L@S>@ N 5>N@ 5>@

V>L@S>@ L L

2 L DYDQoDTXDQGRDGHVLJXDOGDGHpYHULILFDGDSDUDN

3RUWDQWR

se k = 1

então i



i + 1

senão k



R[k-1] + 1

(10)

( DSyVXPDFRQFRUGkQFLDWRWDO"

L

... D E F D E F D E F ...

S

D E F D E F

5

0 0 0 1 2 3

N ‘

V>L@ S>@ L L

N N

N !P GHWHFWDGDXPDFRQFRUGkQFLD p QHFHVViULRUHFXDUQRPRGHOR

XWLOL]DQGRDPHVPDIyUPXOD

1RWHVHTXHQHVWHFDVRH[LVWHPGXDVFRQFRUGkQFLDVWRWDLV

3DUDXPDFDGHLDGHFRPSULPHQWRQ RDOJRULWPR.03QXQFD HIHFWXDPDLVGHGXDVFRPSDUDo}HVSRUHOHPHQWR$VVLPR Q~PHURWRWDOGHFRPSDUDo}HVYDULDHQWUHQHQVHQGR SRUWDQWRXPDOJRULWPROLQHDU

(11)

{ Algoritmo KMP }

SURFHGXUH ContarConcordancias ( s, p : cadeia; m, n : integer;

YDU R : vector; YDU conc : integer );

YDU i, k : integer;

EHJLQ construirR(p, m, R);

conc := 0;

i := 1;

k := 1;

ZKLOH i <= n GR LI s[i] = p[k]

WKHQEHJLQ { concordância parcial } i := i + 1;

k := k + 1;

LI k > m

WKHQ{ concordância total } EHJLQ conc := conc + 1;

k := R[k-1] + 1 HQG HQG

HOVH{ desigualdade } LI k = 1

WKHQ i := i + 1

HOVH k := R[k-1] + 1 HQG; { ContarConcordancias }

H[HUFtFLR $GDSWDUHVWHPyGXORSDUDDXWLOL]DomRHPILFKHLURVGH WH[WR3RUH[HPSORSURFXUDUXPDIUDVHFRQWDUDV RFRUUrQFLDVGHXPDSDODYUD

(12)

❒❒

2 2 0R 0 RG GH HO OR R 0D 0 DW WH HP Pi iW WL LF FR R GR G R $O $ O JR J R UL U LW WP PR R .0 . 03 3

'HILQLomR 8P$XWyPDWR)LQLWR'HWHUPLQLVWD$)' pXP TXtQWXSORRUGHQDGR

$ 4È G T )

RQGH

4 p XPFRQMXQWRILQLWRQmRYD]LRGHHVWDGRV

È p XPFRQMXQWRILQLWRDOIDEHWR GHVtPERORVGH HQWUDGD

G 4— È| 4 p DIXQomRSDUFLDOGHWUDQVLomRRX GHPXGDQoDGHHVWDGR

T ± 4 p RHVWDGRLQLFLDO

) ° 4 p RFRQMXQWRGRVHVWDGRVILQDLVRXGH DFHLWDomR

LQSXW

HVWDGR ( DFHLWD/ UHMHLWD )

3DUDFDGDPRGHORDSHVTXLVDURDOJRULWPR.03FRQVLVWHQD FRQVWUXomRGHXP$)'HQDVLPXODomRGRVHXIXQFLRQDPHQWR DRORQJRGDFDGHLDLQSXW GHSHVTXLVD

8PHVWDGRGHDFHLWDomRGRDXWyPDWRFRUUHVSRQGHDXPD FRQFRUGkQFLDWRWDO

(13)

$ FDGDPRGHORFRUUHVSRQGHXP$)'FXMDIXQomRGHWUDQVLomR IRLUHSUHVHQWDGDSHORYHFWRU5

3RUH[HPSOR

S

D E F D E F

5 RXQDUHSUHVHQWDomRKDELWXDOGHDXWyPDWRV

G (q

5

,

F

) = q

6 SRUH[HPSOR

R[5] = 2 ¾

G (q

5

, x) = q

2

, x

œ F

3DUWLQGRGRHVWDGRLQLFLDO

0

DOHLWXUDGDVHTXrQFLDDEFDEF FRQGX]DRHVWDGRGHDFHLWDomR

6)

$SyVXPDGHVLJXDOGDGHRXXPDFRQFRUGkQFLDWRWDOR DXWyPDWRUHJUHVVDDXPGRVHVWDGRVDQWHULRUHV

(VVH³UHJUHVVR´HUDUHSUHVHQWDGRSHODIyUPXOD

k := R[k-1] + 1

(14)

❒❒

8P 8 PD D YD Y DU UL LD DQ Q W W H H GR G R $O $ OJ JR RU UL LW WP P R R .0 . 03 3

1RDOJRULWPR.03EDVHRYHFWRU5pVHPSUHXWLOL]DGRDWUDYpVGD IyUPXOD

k := R[k-1] + 1

8PDDOWHUDomRVLPSOHVSDUDHYLWDUDVXEWUDFomRHDVRPD FRQVLVWHHPUHJLVWDUQXPYHFWRU6RUHVXOWDGRGHVVDIyUPXOD 3RUH[HPSOR

S

D E F D E F

5 6

8WLOL]DomRGHPDLVXPHOHPHQWRN P SDUDRFDVRGDFRQFRUGkQFLDWRWDO

SURFHGXUH construirS ( p : cadeia; m : integer; YDU S : vector);

YDU i, k : integer;

EHJLQS[1] := 1;

k := 1;

IRUi := 2 WR m GR

EHJLQS[i] := k;

LIp[i] = p[k]

WKHQk := k + 1 HOVHk := 1 HQG;

S[m+1] := k

HQG

(15)

1RH[HPSORVHJXLQWHpXWLOL]DGDXPDIXQomR

$ SHVTXLVDpUHDOL]DGDQXPILFKHLUR)GHWH[WRFRQVLGHUDGR JOREDOjIXQomRHRYHFWRU6pORFDO

IXQFWLRQ concordancias ( p : cadeia; m : integer ) : integer;

YDU k, c : integer;

car : char;

S : vector;

EHJLQ construirS(p, m, S);

c := 0;

k := 1;

reset(F);

read(F, car);

ZKLOH QRW eof(F) GR LI car = p[k]

WKHQEHJLQ { concordância parcial } read(F, car);

k := k + 1;

LI k > m

WKHQ{ concordância total } EHJLQ c := c + 1;

k := S[k]

HQG HQG

HOVH{ desigualdade } LI k = 1

WKHQ read(F, car) HOVH k := S[k];

close(F);

concordancias := c

HQG

(16)

❒❒

3H 3 HV VT TX XL LV V D D QX Q XP P D D /L / LV VW WD D /L / LQ QH HD DU U / / LJ L JD DG GD D

&RQVLGHUHPRVDJRUDTXHRGRPtQLRGHSHVTXLVDpXPDOLVWDOLQHDU OLJDGDGHILQLGDSRU

W\SH lista = ^elemento;

elemento = UHFRUG letra : char;

prox : lista HQG;

IXQFWLRQ concordancias ( ponta : lista; p : cadeia; m : integer ) : integer;

YDU k, c : integer;

S : vector;

este : lista;

EHJLQ construirS(p, m, S);

c := 0;

k := 1;

este := ponta;

ZKLOH este <> nil GR LI este^.letra = p[k]

WKHQEHJLQ { concordância parcial } este := este^.prox;

k := k + 1;

LI k > m

WKHQ{ concordância total } EHJLQ c := c + 1;

k := S[k]

HQG HQG

HOVH{ desigualdade } LI k = 1

WKHQ este := este^.prox HOVH k := S[k];

concordancias := c

(17)

❒❒

5H 5 HS SU UH HV VH HQ QW WD Do om mR R GR G R 0R 0 R GH G H O O R R SR S R U U XP X PD D / / LV L VW WD D / / LJ L JD D GD G D

3DUDUHSUHVHQWDURPRGHORQXPDIRUPD³VHPHOKDQWH´DXP

$XWyPDWR)LQLWR'HWHUPLQLVWDFRQVLGHUHPRVDVHJXLQWHOLVWD GXSODPHQWHOLJDGD

W\SH modelo = ^elemento;

elemento = UHFRUG letra : char;

SUR[,UHFXD : modelo HQG;

2 SRQWHLURSUR[pXWLOL]DGRQRFDVRGHXPDLJXDOGDGHGH

FDUDFWHUHVN NHQRFDVRGHXPDGHVLJXDOGDGHRSRQWHLUR UHFXDVHJXHDVWUDQVLo}HVGHILQLGDVSHORYHFWRU6N 6>N@

3RUH[HPSORDRPRGHOR

S

D E F D E F

6 FRUUHVSRQGHDOLVWD

2 GHVORFDPHQWRGHVWDHVWUXWXUDDRORQJRGRGRPtQLRGHSHVTXLVD VLPXODRIXQFLRQDPHQWRGHXP$XWyPDWR)LQLWR'HWHUPLQLVWD

(18)

$VVXPLQGRTXHHVWDUHSUHVHQWDomRGRPRGHORIRLMiFRQVWUXtGD

IXQFWLRQ concordancias ( ponta : lista; inicio : modelo ) : integer;

YDU c : integer;

este : lista;

p : modelo;

EHJLQ c := 0;

este := ponta;

p := inicio;

ZKLOH este <> nil GR

LI este^.letra = p^.letra

WKHQEHJLQ { concordância parcial } este := este^.prox;

LI p^.prox = nil

WKHQ{ concordância total } EHJLQ c := c + 1;

p := p^. recua HOVHHQGp := p^. prox

HQG

HOVH{ desigualdade } LI p = inicio

WKHQ este := este^.prox HOVH p := p^. recua;

concordancias := c HQG; { concordancias }

(19)

❒❒

&R & RQ QV V WU W UX X om o mR R GD G D 5H 5 HS SU UH HV VH HQ QW WD Do om mR R

$ SDUWLUGRSDGUmRLQLFLDOHGRYHFWRU6FRPHoDPRVSRUFRQVWUXLU D OLVWDHGHILQLURVFDPSRVOHWUDHSUR[

3RUH[HPSOR

S

D E F D E F

6

3URFXUHPRVXPDOJRULWPRSDUDDGHILQLomRGRFDPSRUHFXD

(20)

ƒƒ $$OOJJRRUULWLWPPRR

YDUp, ant, aux : modelo;

p := inicio;

p^.recua := inicio;

ZKLOH p^.prox <> nil GR EHJLQant := p;

p := p^.prox;

aux := ant^.recua;

ZKLOH ( aux^.letra <> ant^.letra ) DQG ( aux <> inicio ) GR aux := aux^.recua;

LI ( aux^.letra = ant^.letra ) DQG (ant <> inicio) WKHQ p^.recua := aux^.prox

HOVH p^.recua := inicio

HQG;

(21)

ƒ

ƒ $$OOJJRRUULWLWPPRR

&RPEDVHQRDOJRULWPRXWLOL]DGRSDUDDFRQVWUXomRGRYHFWRU6 YDU i, k : integer;

S[1] := 1;

k := 1;

IRUi := 2 WR m GR

EHJLQS[i] := k;

LIp[i] = p[k]

WKHQk := k + 1 HOVHk := 1 HQG;

H DGDSWDQGRGLUHFWDPHQWH

YDUp, aux : modelo;

p := inicio;

aux := inicio;

p^.recua := inicio;

ZKLOH p^.prox <> nil GR EHJLQp := p^.prox;

p^.recua := aux;

LI p^.letra = aux^.letra WKHQ aux := aux^.prox HOVH aux := inicio

HQG;

(22)

FRQVWUXomRGDVOLVWDVDVVRFLDGDVDRVPRGHORV

S

D E F D E F

5 6

S

D D D D D E

5 6

S

D D D D E D

5 6

Referências

Documentos relacionados

--- PRESIDENTE DA CÂMARA: “Os projetos foram apresentados em reunião de Câmara, discutidos com os Vereadores do Movimento &#34;Figueira 100%&#34; e do Partido

A comissão organizadora do IFTECH Campus Ivaiporã embasada no edital nº 08/2017 da PROEPI/IFPR torna público o presente Edital, de chamada pública interna, destinada

Também será enviado um e-mail contendo os detalhes do cadastro e o link para acesso ao sistema. Clique no botão ACESSAR O APLICATIVO para poder acessar

Essa foi a tese proposta pela ministra Regina Helena Costa à 1ª Turma do Superior Tribunal de Justiça em 13/04, em caso que busca definir se é legítima a incidência da

As informações geradas sobre a silvicultura do pau-rosa têm contribuído para definição de técnicas para o manejo dos plantios conduzidos pela poda da copa ou o corte do

Para realizar a instalação de um acessório de forma local, ou seja, para que tal item tenha seu pacote raiz copiado para um diretório de conhecimento da

pendente, que deixou justa fama neste Conspícuo Tribunal e a quem me coube a honra excepcional de o substituir. Agradeço, desvanecido, verdadeira- mente sensibilizado, os

It is also the parent structure of the so-called BIMEVOX materials (BI for Bismuth, ME for metal ion, V for Vanadium, and OX for oxide), where the Vanadium is partially replaced