30
PCC104 - Projeto e Análise de Algoritmos Marco Antonio M. Carvalho Departamento de Computação Instituto de Ciências Exatas e Biológicas Universidade Federal de Ouro Preto 10 de fevereiro de 2017 Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 1 / 30

Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

PCC104 - Projeto e Análise de Algoritmos

Marco Antonio M. Carvalho

Departamento de ComputaçãoInstituto de Ciências Exatas e Biológicas

Universidade Federal de Ouro Preto

10 de fevereiro de 2017

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 1 / 30

Page 2: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

Avisos

Site da disciplina:I

http://www.decom.ufop.br/marco/

Lista de e-mails:I

[email protected]

Para solicitar acesso:I

http://groups.google.com/group/pcc104

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 2 / 30

Page 3: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

Na aula de hoje

1 Knuth-Morris-Pratt

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 3 / 30

Page 4: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

Avisos

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 4 / 30

Page 5: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

Knuth-Morris-Pratt

Donald Knuth (*1938)I Cientista da Computação americano;I Prêmio Turing em 1974;I John von Neumann Theory Prize 1995;I National Medal of Science 1979;I Kyoto Prize 1996;I Famoso por:

I TeX;I Concrete Mathematics: A Foundation for

Computer Science;I The Art of Computer Programming;I Cheques de US$2,56;I etc...

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 5 / 30

Page 6: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

Knuth-Morris-Pratt

James H. Morris (*1941)I Cientista da Computação americano;I Dean da Carnegie Mellon School of Computer

Science e da Carnegie Mellon Silicon Valley ;I Famoso por:

I Inter-module protection;I Lazy evaluation;I Xerox Alto System;I Andrew Project;I Maya Design;I KMP;I etc...

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 6 / 30

Page 7: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

Knuth-Morris-Pratt

Vaughn Pratt (*1944)I Cientista da Computação americano;I Professor emérito de Stanford;I Famoso por:

I Vários algoritmos;I Contribuições em algoritmos de busca;I Contribuições em algoritmos de ordenação;I Contribuições em algoritmos de teste de

primalidade;I etc...

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 7 / 30

Page 8: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

Knuth-Morris-Pratt

IntroduçãoO algoritmo de busca de padrões Knuth-Morris-Pratt (ou KMP) foiproposto por Donald Knuth e Vaughan Pratt em 1974 e também,independentemente, por James H. Morris;

Os três, conjuntamente, publicaram o algoritmo em 1977;

Este algoritmo utiliza uma função prefixo para o padrão, denominadafunção ⇡ para evitar testar deslocamentos inválidos como no algoritmoingênuo de matching ;

A idéia básica é, quando há uma diferença entre P [j] e T [i], realizar umdeslocamento maior de P à direita, de maneira a evitar comparaçõesredundantes.

T=...abaab|bba

P= abaab|

P= --ab|aab

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 8 / 30

Page 9: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

PrincípioConsideremos a operação do algoritmo de matching ingênuo;

A figura a seguir apresenta um deslocamento s de um gabarito contendo opadrão P= ababaca em relação a um texto T ;

No exemplo, q=5 dos caracteres coincidiram com o texto, mas o sextocaractere do padrão não coincidiu;

A informação de que q caracteres coincidiram com sucesso determina quaissão os caracteres correspondentes no texto;

Conhecendo estes q caracteres do texto, podemos determinarimediatamente que determinados deslocamentos são inválidos;

No mesmo exemplo, o deslocamento s+ 1 é inválido, porque o primeirocaractere do padrão (a) estaria alinhado com um caractere que sabemosnão ser coincidente (b).

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 9 / 30

Page 10: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

O padrão P = ababaca está alinhado com o texto T tal que os primeirosq = 5 caracteres coincidem.

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 10 / 30

Page 11: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

PrincípioAinda no exemplo anterior, o deslocamento s0 = s+ 2, entretanto, alinhaos três primeiros caracteres do padrão com três caracteres do texto, quenecessariamente coincidem;

A figura a seguir ilustra esta situação.

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 11 / 30

Page 12: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

Utilizando a informação dos 5 caracteres coincidentes, podemos deduzirque o deslocamento s+1 é inválido, mas que o deslocamento s0 = s+2 é

consistente com a parte analisada do texto e potencialmente é válido.

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 12 / 30

Page 13: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

PrincípioEm geral, é útil sabermos a resposta da seguinte pergunta:“Dados os caracteres do padrão P [1..q] que casam o caracteres do textoT [s+ 1..s+ q], qual é o menor deslocamento s0 > s, tal que para algumk < q,

P [1..k] = T [s0 + 1..s0 + k], (1)

em que s0 + k = s+ q?

Tal deslocamento s0 é o primeiro deslocamento maior que s potencialmenteválido, dado que “conhecemos” apenas T [s+ 1..s+ q];

Em outras palavras, sabendo que Pq A Ts+q, queremos o prefixo própriomais longo Pk de Pq que também é um sufixo de Ts+q;

Uma vez que s0 + k = s+ q, e são dados s e q, determinar o menordeslocamento s0 é equivalente a determinar o maior comprimento k de umprefixo de Pq.

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 13 / 30

Page 14: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

PrincípioAdicionamos a diferença dos comprimentos destes prefixos de P (ou seja,q � k) ao deslocamento s para determinarmos o novo deslocamento s0, talque s0 = s+ (q � k);

No melhor caso, k = 0, tal que s0 = s+ q, e imediatamente eliminamos osdeslocamentos s+ 1, s+ 2, . . . , s+ q � 1;

De qualquer maneira não será necessário, a cada novo deslocamento s0,comparar os k primeiros caracteres de P com os caracteres correspondentesem T , uma vez que a equação 1 garante que eles coincidem;

Podemos pré-computar a informação necessária comparando o padrãocontra si próprio por meio de uma Função Prefixo.

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 14 / 30

Page 15: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

Função PrefixoConsiderando que T [s0 + 1..s0 + k] é parte da parcela conhecida do texto,esta cadeia de caracteres é um sufixo da cadeia de caracteres Pq;

Portanto, podemos interpretar a equação 1 como se ela pedisse o maiork < q tal que Pk A Pq, assim, sendo o deslocamento s0 = s+ (q � k) opróximo deslocamento potencialmente válido;

É mais conveniente armazenar, para cada valor de q, o valor k de caracterescoincidentes no novo deslocamento s0, ao invés de armazenar s0 � s;

Formalmente, dado um padrão P [1..m], a função prefixo de P é a função⇡ : {1, 2, . . . ,m}! {0, 1, . . . ,m� 1} tal que⇡[q] = max{k : k < q e Pk A Pq}.

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 15 / 30

Page 16: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

Podemos pré-computar informações úteis para computação do próximodeslocamento pela comparação do padrão com ele próprio;

No exemplo, temos que o prefixo mais longo de P que também é um sufixo de P5

é P3. Representamos esta informação no arranjo ⇡, tal que ⇡[5] = 3, e o próximodeslocamento potencialmente válido é s0 = s+ (q � ⇡[q]), dado que q caracterescoincidiram no deslocamento s.

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 16 / 30

Page 17: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

Função PrefixoEm outras palavras, ⇡[q] é o comprimento do prefixo mais comprido de Pque também é um sufixo próprio de Pq;

A figura seguinte apresenta a função prefixo ⇡ completa para o padrãoababaca

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 17 / 30

Page 18: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

Primeiro exemplo: função ⇡ para o padrão P = ababaca.

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 18 / 30

Page 19: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

Deslizamos o gabarito que contém P para a direita e observamos quando algum prefixo

Pk de P coincide com algum sufixo próprio de P5; Temos coincidências quando

k = 3, 1, 0;

Na figura, a primeira linha fornece P e a linha vertical pontilhada é desenhada logo após

P5. As linhas seguintes mostram todos os deslocamentos de P que levam um prefixo Pk

de P a coincidir com algum sufixo de P5;

Caracteres coincidentes são apresentados e cinza; linhas verticais conectam caracteres

alinhados coincidentes, logo, {k : k < 5 e Pk A P5} = {3, 1, 0}.Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 19 / 30

Page 20: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

Segundo exemplo de cálculo da função prefixo, desta vez, para P = ababababca.

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 20 / 30

Page 21: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

Algoritmo de matchingA seguir é apresentado o procedimento de matching do KMP, referidocomo KMP-Matcher;

Este procedimento, por sua vez, utiliza o procedimento auxiliarComputaFuncaoPrefixo, para o cálculo de ⇡, apresentado primeiro;

Estes dois procedimentos possuem muito em comum, dado que ambosalinham uma cadeia de caracteres ao padrão P : o KMP-Matcher alinha otexto T ao padrão P , ao passo que o ComputaFuncaoPrefixo alinha opadrão P consigo mesmo;

Dada esta coincidência entre os procedimentos, a análise de complexidadede ambos é semelhante.

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 21 / 30

Page 22: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

1 ComputaFuncaoPrefixo(P )Entrada: Cadeia de caracteres P

2 m |P |;3 Crie ⇡[1..m]; é um arranjo completamente novo4 ⇡[1] 0;5 k 0;// considere q m

6 para q 2 até m faça

7 enquanto k > 0 e P [k + 1] 6= P [q] faça

8 k ⇡[k];9 fim

10 se P [k + 1] = P [q] então

11 k k + 1;12 fim

13 ⇡[q] k;14 fim

15 retorna (⇡);

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 22 / 30

Page 23: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

Complexidade – ComputaFuncaoPrefixo

O tempo de execução de ComputaFuncaoPrefixo é ⇥(m). O detalheestá na análise amortizada do laço enquanto, executado O(m) vezes:

I k inicia de zero e só é incrementado na linha 11, instrução executadano máximo uma vez por iteração do laço para (incremento máximo dem-1, portanto);

I Considerando que k < q antes do laço para e que cada iteração destelaço incrementa q, temos sempre que k < q;

I Desta maneira, as atribuições das linhas 4 e 13 garantem que ⇡[q] < qpara todo q = 1, 2, . . . ,m, o que significa que a cada iteração, o laçoenquanto decrementa k;

I k nunca se torna negativo;I Juntando todas as informações, temos que o decremento total em k

no laço enquanto é limitado superiormente pelo incremento total dek no laço para, que é m� 1.

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 23 / 30

Page 24: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

Complexidade – ComputaFuncaoPrefixo

Considerando todas as observações sobre k, o laço enquanto é repetidopor m� 1 vezes, e o procedimento ComputaFuncaoPrefixo é executadoem tempo ⇥(m).

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 24 / 30

Page 25: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

1 KMP-Matcher(T, P )Entrada: Cadeias de caracteres T e P

2 n |T |;3 m |P |;4 ⇡ ComputaFuncaoPrefixo(P );5 q 0;// considere i n

6 para i 1 até n faça

7 enquanto q > 0 e P [q + 1] 6= T [i] faça

8 q ⇡[q];9 fim

10 se P [q + 1] = T [i] então

11 q q + 1;12 fim

13 se q = m então

14 Imprima “O padrão ocorre com deslocamento i�m”;15 q ⇡[q];16 fim

17 fim

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 25 / 30

Page 26: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

Complexidade – KMP-Matcher

De maneira análoga à analise amortizada realizada para o procedimentoComputaFuncaoPrefixo, podemos analisar a complexidade doprocedimento KMP-Matcher;

Com efeito, basta substituir as observações sobre k por q, o limite m por ne o índice do laço para q por i.

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 26 / 30

Page 27: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

Complexidade – KMP-Matcher

O tempo de execução de KMP-Matcher é ⇥(n). O detalhe está naanálise amortizada do laço enquanto, executado O(n) vezes:

I q inicia de zero e só é incrementado na linha 11, instrução executadano máximo uma vez por iteração do laço para (incremento máximo den-1, portanto);

I Considerando que q < i antes do laço para e que cada iteração destelaço incrementa i, temos sempre que q < i;

I Desta maneira, as atribuições das linhas 4 e 15 garantem que q < ipara todo i = 1, 2, . . . , n, o que significa que a cada iteração, o laçoenquanto decrementa q;

I q nunca se torna negativo;I Juntando todas as informações, temos que o decremento total em q

no laço enquanto é limitado superiormente pelo incremento total de qno laço para, que é n� 1.

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 27 / 30

Page 28: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

Complexidade – KMPO algoritmo KMP possui tempo de pré-processamento ⇥(m) e tempo dematching ⇥(n), logo, a complexidade do algoritmo é ⇥(m+ n);

Sabemos que m < n na prática, portanto, a complexidade esperada doalgoritmo na prática é ⇥(n).

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 28 / 30

Page 29: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

KMP

Exercícios1 Compute a função prefixo para P= abarba;2 Use o algoritmo KMP para buscar P em T=abacaabaccabacabaabb.

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 29 / 30

Page 30: Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de hoje 1 Knuth-Morris-Pratt Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro

Dúvidas?

Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 30 / 30