• Nenhum resultado encontrado

Busca de padrão

N/A
N/A
Protected

Academic year: 2022

Share "Busca de padrão"

Copied!
96
0
0

Texto

(1)

Análise de Algoritmos

Parte destes slides são adaptações de slides

do Prof. Paulo Feofiloff e do Prof. José Coelho de Pina.

Algoritmos – p. 1/17

(2)

Busca de padrão

Dados

uma palavra P [1 . . m] e um texto T [1 . . n],

uma ocorrência de P em T é um índice s tal que T[s + j] = P [j] para j = 1, . . . , m.

(3)

Busca de padrão

Dados

uma palavra P [1 . . m] e um texto T [1 . . n],

uma ocorrência de P em T é um índice s tal que T[s + j] = P [j] para j = 1, . . . , m.

Exemplo:

1 2 3 1 2 3 4 5 6 7 8 9 10 11

P B R A T A B R A C A D A B R A

Algoritmos – p. 2/17

(4)

Busca de padrão

Dados

uma palavra P [1 . . m] e um texto T [1 . . n],

uma ocorrência de P em T é um índice s tal que T[s + j] = P [j] para j = 1, . . . , m.

Exemplo:

1 2 3 1 2 3 4 5 6 7 8 9 10 11

P B R A T A B R A C A D A B R A Problema: Dada uma palavra P[1 . . m] e um texto T[1 . . n],

encontrar todas as ocorrências de em .

(5)

Busca de padrão

Dados

uma palavra P [1 . . m] e um texto T [1 . . n],

uma ocorrência de P em T é um índice s tal que T[s + j] = P [j] para j = 1, . . . , m.

Exemplo:

1 2 3 1 2 3 4 5 6 7 8 9 10 11

P B R A T A B R A C A D A B R A Problema: Dada uma palavra P[1 . . m] e um texto T[1 . . n],

encontrar todas as ocorrências de P em T .

No exemplo, P ocorre duas vezes em T: em 1 e em 8.

Algoritmos – p. 2/17

(6)

Algoritmo Boyer-Moore 1

Supondo que o alfabeto é o conjunto Σ = {0, . . . , 255}.

BM1 (P, m, T, n)

1 para i ← 0 até 255 faça v1[i] ← m

2 para i ← 1 até m faça v1[P[i]] ← m − i 3 c ← 0 k ← m

4 enquanto k ≤ n faça 5 r ← 0

6 enquanto m − r ≥ 1 e P [m − r] = T[k − r] faça 7 r ← r + 1

8 se m − r < 1 então c ← c + 1 9 se k = n

10 então k ← k + 1

11 senão k ← k + 1 + v1[T [k + 1]]

(7)

Algoritmo Boyer-Moore 1

Supondo que o alfabeto é o conjunto Σ = {0, . . . , 255}.

BM1 (P, m, T, n)

1 para i ← 0 até 255 faça v1[i] ← m

2 para i ← 1 até m faça v1[P[i]] ← m − i 3 c ← 0 k ← m

4 enquanto k ≤ n faça 5 r ← 0

6 enquanto m − r ≥ 1 e P [m − r] = T[k − r] faça 7 r ← r + 1

8 se m − r < 1 então c ← c + 1 9 se k = n

10 então k ← k + 1

11 senão k ← k + 1 + v1[T [k + 1]]

12 devolva c

Consumo de tempo: Θ(|Σ| + mn)

Algoritmos – p. 3/17

(8)

Algoritmo Boyer-Moore 2

BM2 (P, m, T, n)

1 para i ← m decrescendo até 1 faça 2 j ← m − 1 r ← 0

3 enquanto m − r ≥ i e j − r ≥ 1 faça

4 se P[m − r] = P [j − r] então r ← r + 1

5 senão j ← j − 1 r ← 0

6 v2[i] ← m − j

(9)

Algoritmo Boyer-Moore 2

BM2 (P, m, T, n)

1 para i ← m decrescendo até 1 faça ...

6 v2[i] ← m − j 7 c ← 0 k ← m

8 enquanto k ≤ n faça 9 r ← 0

10 enquanto m − r ≥ 1 e P [m − r] = T [k − r] faça 11 r ← r + 1

12 se m − r < 1 então c ← c + 1 13 se r = 0 então k ← k + 1

14 senão k ← k + v2[m − r + 1]

15 devolva c

Algoritmos – p. 4/17

(10)

Algoritmo Boyer-Moore 2

BM2 (P, m, T, n)

1 para i ← m decrescendo até 1 faça ...

6 v2[i] ← m − j 7 c ← 0 k ← m

8 enquanto k ≤ n faça 9 r ← 0

10 enquanto m − r ≥ 1 e P [m − r] = T [k − r] faça 11 r ← r + 1

12 se m − r < 1 então c ← c + 1 13 se r = 0 então k ← k + 1

14 senão k ← k + v2[m − r + 1]

15 devolva c

(11)

Algoritmo Boyer-Moore

Calcula v1 e v2, e

atualiza fazendo sempre o maior dos dois deslocamentos.

Algoritmos – p. 5/17

(12)

Algoritmo Boyer-Moore

Calcula v1 e v2, e

atualiza fazendo sempre o maior dos dois deslocamentos.

Consumo de tempo: Θ(mn)

(fazendo melhora para inicializar v1)

(13)

Algoritmo Boyer-Moore

Calcula v1 e v2, e

atualiza fazendo sempre o maior dos dois deslocamentos.

Consumo de tempo: Θ(mn)

(fazendo melhora para inicializar v1)

No caso médio entretanto, ele consome apenas O(n).

É o mais rápido algoritmo de busca de padrão na prática.

Algoritmos – p. 5/17

(14)

Algoritmo Boyer-Moore

Calcula v1 e v2, e

atualiza fazendo sempre o maior dos dois deslocamentos.

Consumo de tempo: Θ(mn)

(fazendo melhora para inicializar v1)

No caso médio entretanto, ele consome apenas O(n).

É o mais rápido algoritmo de busca de padrão na prática.

É possível aperfeiçoar a tabela v2 para que

este algoritmo consuma apenas O(m + n) no pior caso.

(15)

Algoritmo Boyer-Moore

Calcula v1 e v2, e

atualiza fazendo sempre o maior dos dois deslocamentos.

Consumo de tempo: Θ(mn)

(fazendo melhora para inicializar v1)

No caso médio entretanto, ele consome apenas O(n).

É o mais rápido algoritmo de busca de padrão na prática.

É possível aperfeiçoar a tabela v2 para que

este algoritmo consuma apenas O(m + n) no pior caso.

Veja os exercícios nas notas de aula indicadas para leitura.

Algoritmos – p. 5/17

(16)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

A B C D R

v1 0 2 4 4 1 k = 4

(17)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

A B C D R

v1 0 2 4 4 1 k = 4

c = 1

Algoritmos – p. 6/17

(18)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

A B C D R

v1 0 2 4 4 1 k = 4

(19)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

A B C D R

v1 0 2 4 4 1 k = 4

c = 3

Algoritmos – p. 6/17

(20)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

A B C D R

v1 0 2 4 4 1 k = 4

(21)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

A B C D R

v1 0 2 4 4 1 k = 4 + 4 + 1 = 9

c = 4

Algoritmos – p. 6/17

(22)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

A B C D R

v1 0 2 4 4 1 k = 9

(23)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

A B C D R

v1 0 2 4 4 1 k = 9

c = 5

Algoritmos – p. 6/17

(24)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

A B C D R

v1 0 2 4 4 1 k = 9 + 1 + 1 = 11

(25)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

A B C D R

v1 0 2 4 4 1 k = 11

c = 5

Algoritmos – p. 6/17

(26)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

A B C D R

v1 0 2 4 4 1 k = 11

(27)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

A B C D R

v1 0 2 4 4 1 k = 11

c = 7

Algoritmos – p. 6/17

(28)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

A B C D R

v1 0 2 4 4 1 k = 11

(29)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

A B C D R

v1 0 2 4 4 1 k = 11

c = 9

Algoritmos – p. 6/17

(30)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

A B C D R

v1 0 2 4 4 1 k = 11 + 1 = 12 > 11

(31)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

A B C D R

v1 0 2 4 5 1 k = 5

c = 0

Algoritmos – p. 7/17

(32)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

A B C D R

v1 0 2 4 5 1 k = 5

(33)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

A B C D R

v1 0 2 4 4 1 k = 5 + 0 + 1 = 6

c = 1

Algoritmos – p. 7/17

(34)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

A B C D R

v1 0 2 4 5 1 k = 6

(35)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

A B C D R

v1 0 2 4 5 1 k = 6

c = 2

Algoritmos – p. 7/17

(36)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

A B C D R

v1 0 2 4 5 1 k = 6

(37)

Boyer-Moore: simulação v1

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

A B C D R

v1 0 2 4 5 1 k = 6 + 5 + 1 = 12 > 11 c = 3 comparações!!

Algoritmos – p. 7/17

(38)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 4

(39)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 4

c = 1

Algoritmos – p. 8/17

(40)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 4

(41)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 4

c = 3

Algoritmos – p. 8/17

(42)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 4

(43)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 4 + 3 = 7

c = 4

Algoritmos – p. 8/17

(44)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 7

(45)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 7 + 1 = 8

c = 5

Algoritmos – p. 8/17

(46)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 8

(47)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 8

c = 6

Algoritmos – p. 8/17

(48)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 8

(49)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 8 + 3 = 11

c = 7

Algoritmos – p. 8/17

(50)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 11

(51)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 11

c = 8

Algoritmos – p. 8/17

(52)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 11

(53)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 11

c = 10

Algoritmos – p. 8/17

(54)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 11

(55)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 4

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4

v2 3 3 3 3 k = 11 + 3 = 14 > 11 c = 11 comparações!

Algoritmos – p. 8/17

(56)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 5

(57)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 5 + 1 = 6

c = 1

Algoritmos – p. 9/17

(58)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 6

(59)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 6

c = 2

Algoritmos – p. 9/17

(60)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 6

(61)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 6 + 3 = 9

c = 3

Algoritmos – p. 9/17

(62)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 9

(63)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 9 + 1 = 10

c = 4

Algoritmos – p. 9/17

(64)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 10

(65)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 10 + 1 = 11

c = 5

Algoritmos – p. 9/17

(66)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 11

(67)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 11

c = 6

Algoritmos – p. 9/17

(68)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 11

(69)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 11

c = 8

Algoritmos – p. 9/17

(70)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 11

(71)

Boyer-Moore: simulação v2

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4 5

P C A B R A

1 2 3 4 5

v2 5 5 5 5 3 k = 11 + 1 = 12 > 11 c = 10 comparações!

Algoritmos – p. 9/17

(72)

Boyer-Moore: simulação v3

Exemplo: n = 11 m = 5

1 2 3 4 5 6 7 8 9 10 11

T A B R A C A D A B R A

1 2 3 4

P A B R A

1 2 3 4 5

P C A B R A

Exercício: Simule a versão 3 do algoritmo, que usa v1 e v2,

(73)

Algoritmo KMP

KMP: Knuth, Morris e Pratt.

Algoritmos – p. 11/17

(74)

Algoritmo KMP

KMP: Knuth, Morris e Pratt.

Pq: prefixo de P de comprimento q

(75)

Algoritmo KMP

KMP: Knuth, Morris e Pratt.

Pq: prefixo de P de comprimento q Pk ⊒ Pq: Pk é sufixo de Pq

Algoritmos – p. 11/17

(76)

Algoritmo KMP

KMP: Knuth, Morris e Pratt.

Pq: prefixo de P de comprimento q Pk ⊒ Pq: Pk é sufixo de Pq

Função prefixo: Π[q] = max{k : k < q e Pk ⊒ Pq}

(77)

Algoritmo KMP

KMP: Knuth, Morris e Pratt.

Pq: prefixo de P de comprimento q Pk ⊒ Pq: Pk é sufixo de Pq

Função prefixo: Π[q] = max{k : k < q e Pk ⊒ Pq} Em palavras, Π[q] é o comprimento do

maior prefixo próprio de Pq que é sufixo de Pq.

Algoritmos – p. 11/17

(78)

Algoritmo KMP

KMP: Knuth, Morris e Pratt.

Pq: prefixo de P de comprimento q Pk ⊒ Pq: Pk é sufixo de Pq

Função prefixo: Π[q] = max{k : k < q e Pk ⊒ Pq} Em palavras, Π[q] é o comprimento do

maior prefixo próprio de Pq que é sufixo de Pq.

Exemplo:

1 2 3 4 5 6 7 8 9 10 11

P a b a b a a b a b c a

(79)

Algoritmo KMP

CALCULA-PREFIXO (P , m) 1 Π[1] 0

2 k ← 0

3 para q ← 2 até m faça

4 enquanto k > 0 e P[k + 1] 6= P[q] faça 5 k ← Π[k]

6 se P [k + 1] = P [q]

7 então k ← k + 1 8 Π[q] ← k

9 devolva Π

Algoritmos – p. 12/17

(80)

Algoritmo KMP

CALCULA-PREFIXO (P , m) 1 Π[1] 0

2 k ← 0

3 para q ← 2 até m faça

4 enquanto k > 0 e P[k + 1] 6= P[q] faça 5 k ← Π[k]

6 se P [k + 1] = P [q]

7 então k ← k + 1 8 Π[q] ← k

9 devolva Π

Consumo de tempo: O(m2)

(81)

Algoritmo KMP

CALCULA-PREFIXO (P , m) 1 Π[1] 0

2 k ← 0

3 para q ← 2 até m faça

4 enquanto k > 0 e P[k + 1] 6= P[q] faça 5 k ← Π[k]

6 se P [k + 1] = P [q]

7 então k ← k + 1 8 Π[q] ← k

9 devolva Π

Consumo de tempo: Θ(m2)??

Algoritmos – p. 12/17

(82)

Invariantes do Algoritmo KMP

CALCULA-PREFIXO (P , m) 1 Π[1] 0 k ← 0

2 para q ← 2 até m faça

3 enquanto k > 0 e P[k + 1] 6= P[q] faça 4 k ← Π[k]

5 se P [k + 1] = P [q]

6 então k ← k + 1 7 Π[q] ← k

8 devolva Π

(83)

Invariantes do Algoritmo KMP

CALCULA-PREFIXO (P , m) 1 Π[1] 0 k ← 0

2 para q ← 2 até m faça

3 enquanto k > 0 e P[k + 1] 6= P[q] faça 4 k ← Π[k]

5 se P [k + 1] = P [q]

6 então k ← k + 1 7 Π[q] ← k

8 devolva Π (1) k = Π[q − 1]

(2) Π[1 . . q − 1] está calculado corretamente

Algoritmos – p. 13/17

(84)

Consumo de tempo do KMP

CALCULA-PREFIXO (P , m) 1 Π[1] ← 0 k ← 0

2 para q ← 2 até m faça

3 enquanto k > 0 e P[k + 1] 6= P[q] faça 4 k ← Π[k]

5 se P [k + 1] = P [q]

6 então k ← k + 1 7 Π[q] ← k

8 devolva Π

Método do potencial: Tome Φq = k no fim da iteração q.

(85)

Consumo de tempo do KMP

CALCULA-PREFIXO (P , m) 1 Π[1] ← 0 k ← 0

2 para q ← 2 até m faça

3 enquanto k > 0 e P[k + 1] 6= P[q] faça 4 k ← Π[k]

5 se P [k + 1] = P [q]

6 então k ← k + 1 7 Π[q] ← k

8 devolva Π

Método do potencial: Tome Φq = k no fim da iteração q. Valor inicial: Φ1 = 0

Algoritmos – p. 14/17

(86)

Consumo de tempo do KMP

CALCULA-PREFIXO (P , m) 1 Π[1] ← 0 k ← 0

2 para q ← 2 até m faça

3 enquanto k > 0 e P[k + 1] 6= P[q] faça 4 k ← Π[k]

5 se P [k + 1] = P [q]

6 então k ← k + 1 7 Π[q] ← k

8 devolva Π

Método do potencial: Tome Φq = k no fim da iteração q. Φ1 = 0 e Φq ≥ 0 para q = 1, . . . , m.

(87)

Consumo de tempo do KMP

CALCULA-PREFIXO (P , m) 1 Π[1] ← 0 k ← 0

2 para q ← 2 até m faça

3 enquanto k > 0 e P[k + 1] 6= P[q] faça 4 k ← Π[k]

5 se P [k + 1] = P [q]

6 então k ← k + 1 7 Π[q] ← k

8 devolva Π

Método do potencial: Tome Φq = k no fim da iteração q. Φ1 = 0 e Φq ≥ 0 para q = 1, . . . , m.

cq: 1+ número de execuções da linha 4 na iteração q.

Algoritmos – p. 14/17

(88)

Consumo de tempo do KMP

CALCULA-PREFIXO (P , m) 1 Π[1] ← 0 k ← 0

2 para q ← 2 até m faça

3 enquanto k > 0 e P[k + 1] 6= P[q] faça 4 k ← Π[k]

5 se P [k + 1] = P [q]

6 então k ← k + 1 7 Π[q] ← k

8 devolva Π

Método do potencial: Tome Φq = k no fim da iteração q. Φ1 = 0 e Φq ≥ 0 para q = 1, . . . , m.

: 1+ número de execuções da linha 4 na iteração .

(89)

Consumo de tempo do KMP

CALCULA-PREFIXO (P , m) 1 Π[1] ← 0 k ← 0

2 para q ← 2 até m faça

3 enquanto k > 0 e P[k + 1] 6= P[q] faça 4 k ← Π[k]

5 se P [k + 1] = P [q]

6 então k ← k + 1 7 Π[q] ← k

8 devolva Π

Φq = k no fim da iteração q e Φ1 = 0.

cq: 1+ número de execuções da linha 4 na iteração q. ˆ

cq = cq + Φq − Φq−1

Algoritmos – p. 15/17

(90)

Consumo de tempo do KMP

CALCULA-PREFIXO (P , m) 1 Π[1] ← 0 k ← 0

2 para q ← 2 até m faça

3 enquanto k > 0 e P[k + 1] 6= P[q] faça 4 k ← Π[k]

5 se P [k + 1] = P [q]

6 então k ← k + 1 7 Π[q] ← k

8 devolva Π

Φq = k no fim da iteração q e Φ1 = 0.

cq: 1+ número de execuções da linha 4 na iteração q. ˆ

cq = cq + Φq − Φq−1

Cada execução da linha 4 faz k diminuir de pelo menos 1.

(91)

Consumo de tempo do KMP

CALCULA-PREFIXO (P , m) 1 Π[1] ← 0 k ← 0

2 para q ← 2 até m faça

3 enquanto k > 0 e P[k + 1] 6= P[q] faça 4 k ← Π[k]

5 se P [k + 1] = P [q]

6 então k ← k + 1 7 Π[q] ← k

8 devolva Π

Φq = k no fim da iteração q e Φ1 = 0.

cq: 1+ número de execuções da linha 4 na iteração q. ˆ

cq = cq + Φq − Φq−1

Cada execução da linha 4 faz k diminuir de pelo menos 1.

Logo Φq ≤ Φq−1 − (cq − 1) + 1, e cˆq ≤ cq − (cq − 1) + 1 = 2. Custo amortizado por iteração: 2

Algoritmos – p. 15/17

(92)

Consumo de tempo do KMP

CALCULA-PREFIXO (P , m) 1 Π[1] ← 0 k ← 0

2 para q ← 2 até m faça

3 enquanto k > 0 e P[k + 1] 6= P[q] faça 4 k ← Π[k]

5 se P [k + 1] = P [q]

6 então k ← k + 1 7 Π[q] ← k

8 devolva Π

Φq = k no fim da iteração q e Φ1 = 0.

cq: 1+ número de execuções da linha 4 na iteração q. ˆ

cq = cq + Φq − Φq−1

Cada execução da linha 4 faz k diminuir de pelo menos 1.

(93)

Algoritmo KMP

KMP (T, n, P , m)

1 Π CALCULA-PREFIXO (P, m) 2 q ← 0

3 para i ← 1 até n faça

4 enquanto q > 0 e P[q + 1] 6= T [i] faça 5 q ← Π[q]

6 se P [q + 1] = T [i]

7 então q ← q + 1 8 se q = m

9 então imprima i − q 10 então q ← Π[q]

Algoritmos – p. 16/17

(94)

Algoritmo KMP

Invariantes:

(1) k = Π[q − 1]

(2) Π[1 . . q − 1] está calculado corretamente

(95)

Algoritmo KMP

Invariantes:

(1) k = Π[q − 1]

(2) Π[1 . . q − 1] está calculado corretamente Exercício: Complete a análise de correção, ou seja, prove os invariantes acima.

Algoritmos – p. 17/17

(96)

Algoritmo KMP

Invariantes:

(1) k = Π[q − 1]

(2) Π[1 . . q − 1] está calculado corretamente Exercício: Complete a análise de correção, ou seja, prove os invariantes acima.

Exercício: Simule o KMP com o texto e as duas palavras usadas nas simulações com o BM e calcule o número de comparações feitas para cada uma das duas palavras.

Referências

Documentos relacionados

Para entender o supermercado como possível espaço de exercício cidadão, ainda, é importante retomar alguns pontos tratados anteriormente: (a) as compras entendidas como

Nesse contexto, a análise numérica via MEF de vibrações sísmicas induzidas por detonações se mostra como uma metodologia que pode contribuir significativamente

No entanto, após 30 dias de armazenagem, o teor de fármaco nas suspensões decaiu para valores próximos a 50 % nas formulações que continham 3 mg/mL de diclofenaco e núcleo

A seqüência analítica • Definição do problema • Escolha do método • Amostragem • Pré-tratamento da amostra • Medida • Calibração • Avaliação •

6 Consideraremos que a narrativa de Lewis Carroll oscila ficcionalmente entre o maravilhoso e o fantástico, chegando mesmo a sugerir-se com aspectos do estranho,

Os frutos tratados com 1-MCP apresentaram, nos dois anos de observações, sensivelmente a mesma tendência em cada uma das grandezas analisadas, tanto à saída da câmara

4 - Valores da Refl ectância Bidirecional (em fração, de 0 a 1) versus o comprimento de onda central da banda obtidos para a vegetação na imagem sem correção atmosférica e

E ele funciona como um elo entre o time e os torcedores, com calçada da fama, uma série de brincadeiras para crianças e até área para pegar autógrafos dos jogadores.. O local