Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de...
Transcript of Departamento de Computação Instituto de Ciências Exatas e … · 2019. 11. 14. · Na aula de...
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
Avisos
Site da disciplina:I
http://www.decom.ufop.br/marco/
Lista de e-mails:I
Para solicitar acesso:I
http://groups.google.com/group/pcc104
Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 2 / 30
Na aula de hoje
1 Knuth-Morris-Pratt
Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 3 / 30
Avisos
Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 4 / 30
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
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
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
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
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
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
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
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
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
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
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
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
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
KMP
Primeiro exemplo: função ⇡ para o padrão P = ababaca.
Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 18 / 30
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
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
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
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
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
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
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
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
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
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
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
Dúvidas?
Marco Antonio M. Carvalho (UFOP) PCC104 10 de fevereiro de 2017 30 / 30