Algoritmo de Rabin-Karp

1.901 visualizações

Publicada em

Apresentação sobre Algoritmo de Rabin-Karp para busca de string, Apresentação realizada para a matéria de Projeto de Analise de Algorítimos da Universidade de Vila Velha. Alunos: Lorran Pegoretti e Matheus Lani Regattieri Arrais.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.901
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
46
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Algoritmo de Rabin-Karp

  1. 1. Algoritmo de Rabin-KarpLORRAN PEGORETTIMATHEUS LANI REGATTIERI ARRAISTRABALHO REALIZADO PARA AVALIAÇÃO NA DISCIPLINA DE PROJETO E ANÁLISE DEALGORITMOS, DO CURSO DE CIÊNCIA DA COMPUTAÇÃO, TURNO MATUTINO, DAUNIVERSIDADE DE VILA VELHA (UVV), MINISTRADA PELO PROFESSOR  ALESSANDRO BERTOLANI.2013
  2. 2. Tópicos Abordados Descrição do Problema Original Descrição do Algoritmo Rabin-Karp Descrição de Estratégia Pseudocódigo Funcionamento do Algoritmo Identificação dos conceitos estratégicos Complexidade Exemplos Conclusões Trabalho Similares/Futuros Referências
  3. 3. Descrição do Problema OriginalBusca por padrão de Strings O problema consiste em dado o texto T e o padrão P encontrartodas as ocorrências de P dentro de T. Todo s tal que T[s + 1…s + m] = P [1...m], onde s é o índice de cadaocorrência e m é o tamanho do padrão P. Busca em um texto dinâmico através de um algoritmo aquele quenão se tem informações prévias sobre ele. Existem cinco algoritmos: Força Bruta, Rabin-Karp, busca porAutômato, Knuth-Morris-Pratt e Boyer-Moore.
  4. 4. Descrição do Algoritmo Rabin-Karp Trata cada substring de tamanho M do texto como uma tabela dedispersão (hash). Padrão é encontrado quando a chave da substring coincide com a dopadrão. Com tabela virtual: tamanho elevado reduz probabilidade de falsasescolhas. Evolução do Força Bruta, ao invés de comparar a janela com o padrãocaracter a caracter, é proposto usar uma comparação numérica entreos restos da divisão por um mesmo inteiro da janela e do padrão.
  5. 5. Descrição do Algoritmo No Força-Bruta a cada deslocamento pode acabar fazendo muitascomparações antes de descobrir que uma janela não é umaocorrência, no Rabin-Karp ele tenta evitar a comparação caractera caracter das janelas que não são ocorrências. Quando o valor numérico da janela e do padrão forem diferentes,necessariamente o conteúdo da janela e do padrão tambémdevem ser diferentes. Notação utilizada: n: numero de caracteres do texto m: numero de caracteres da palavra d: cardinalidade do alfabeto ∑ q: numero primo, como: 16.647.133 T: string do texto P: string da palavra
  6. 6. Descrição da Estratégia Ideia de Programação Dinâmica e Força-Bruta O algoritmo de Rabin-Karp usa a ideia de “Impressão digital” Em aplicações envolvendo objetos longos, como por exemplo,longas cadeias de caracteres, pode-se representar tais objetos por“impressões digitais” curtas. Uma impressão digital pode ser umvalor numérico atribuído a cada objeto por uma função deespalhamento, por exemplo. O importante é que dois objetosdistintos tenham pouca chance de ter a mesma impressão digital,de maneira que, para decidir se dois tais objetos são iguais,possamos comparar não os objetos, mas suas impressões digitais
  7. 7. Objetivo Através de técnicas hashing processar uma função de assinaturade cada substring de m-caracteres do texto e checar se é igual àassinatura da palavra procurada. Função: h(k) = k mod q, onde q é um numero primo grande Método: baseado no processamento da função para a posição i dandoo valor para a posição i – 1. Usa-se um valor elevado de q para evitarcolisões aleatórias. Busca-se diretamente fazer uma comparação entrea palavra e a substring
  8. 8. PseudocódigoRABIN-KARP-MATCHER (T, P, d, q)(1) n  tamanho [T];(2) m  tamanho [P];(3) h  dm-1mod q;(4) p  0;(5) t0  0(6) for i  1 to m(7) do p  (dp + P[i]) mod q;(8) t0  (dt0 + T[i]) mod q;(9) for s  0 to n - m(10) do if p = ts(11) then if P[1..m] = T[s + 1..s + m](12) then “Encontrou a palavra”;(13) if s < n – m(14) then ts+1  (d(ts – T[s + 1]h) + T[s + m + 1]) mod q;
  9. 9. Funcionamento do Algoritmo Linhas[1-5]: inicialização das variáveis. É importante ressaltar que aimplementação da função hash é arbitraria; Linhas [6-8]: iteração com índice relacionado à cardinalidade da palavra.O bloco inicializa o hash(p) da palavra e do texto, hash(t); Linhas [9-14]: iteração de comparação; na linha 10 em caso dacomparação ser valida tem a possibilidade da substring encontrada ser aprocurada. Observa-se que esta linha apresenta o caráter probabilísticodo algoritmo. Uma comparação extra é realizada para confirmar oresultado; não comparando a hash como na anterior, mas os caracteresda substring com a palavra. Em caso negativo da comparação, temos um novo valor de hash(t) paraa substring, realizando a iteração ate encontrar a palavra(s) ou se esgotaro texto.
  10. 10. Identificação dos conceitosestratégicos
  11. 11. Complexidade Pior Caso: é O((n – m + 1)m), podendo ser reduzida a O(nm), estecaso ocorreria quando o numero de colisões fosse elevado, o queobrigaria o algoritmo a realizar um maior numero de comparações eoperações para se obter um novo valor de hash(t). Nos casos médio e melhor: este algoritmo trabalha em O(m + n). Aprova para estes casos é complicada, devido principalmente aocaráter probabilístico deste algoritmo, pode-se obter demonstraçãoem [Cor97]. Apesar de ser probabilístico este algoritmo não se apresenta eficientena busca de textos que estejam em constante mudança, já paratextos que não são modificados constantemente ele poderáapresentar um desempenho melhor devido ao aproveitamento databela hash, para encontrar estas palavras.
  12. 12. Exemplo
  13. 13. Exemplo
  14. 14. Exemplo Ao padrão P = 31415 corresponde o valor decimal p = 31.415 Seja T = 123141567, então: T[1..5] = 12314 e t0 = 12314 T[2..6] = 23141 e t1 = 23141 T[3..7] = 31415 e t2 = 31415 T[4..8] = 14156 e t3 = 14156 T[5..9] = 41567 e t4 = 41567
  15. 15. Conclusões Tenta diminuir o numero de comparações através do calculo de um hash da palavraprocurada e da substring, porem através deste procedimento ele se torna probabilístico Os cálculos de p e t0 gastam tempo O(m) Os cálculos de t1, ..., tn-m mais a eventual comparação por “força-bruta”, gastam tempoO((n - m)m) Numero máximo de deslocamentos s válidos é n – m +1 Tempo total do algoritmo de Rabin-Karp é O(nm) Na prática, o algoritmo tem bom desempenho Ele é válido para qualquer alfabeto, bastando apenas interpretar cada caracterecomo um dígito
  16. 16. Trabalhos Similares/Futuros Knuth-Morris-Pratt: considerado o algoritmo de “força bruta”, quandoocorre uma diferença entre T[i] e P[j], evitar comparaçõesredundantes. Função de falha onde o pré-processamento em Pdetermina se seus prefixos aparecem como subsequência dele mesmo,será definido também como o tamanho o maior prefixo de P[0..k] queé sufixo de P[1..k]. É pré-calculado apenas o que pode ser reaproveitado dacomparação anterior, independente do próximo caracter . Boyer-Moore: baseia-se na alta probabilidade de encontrar diferençasem alfabetos grandes, por isso, P é comparado com T de trás parafrente, quando se encontra uma diferença em T[i], o padrão P dará umsalto à frente, considerando-se as comparações já realizadas
  17. 17. ComparaçõesFoi usado linguagem Java, S.O Ubuntu 12.04, notebook Core2Duocom 4Gb de memória.Os resultados apresentados abaixo são correspondentes à pesquisada palavra ’Capitu’ pelo livro ’Dom Casmurro’ de Machado de Assis.A cópia utilizada possuí 371.457caracteres enquanto o padrão possui6 caracteres, há 335 ocorrências no texto.Forca Bruta Tempo médio total: 6,4 ms Número de comparações na busca: 745,399 Número de comparações total: 745,399Rabin-Karp Tempo médio total: 6,8 ms Número de comparações na busca: 374,405 Número de comparações total: 374,405
  18. 18. Comparações KMP Tempo médio total: 5,86 ms Número de comparações na busca: 745,409 Número de comparações total: 745,414 Boyer Moore Tempo médio total: 3,2 ms Número de comparações na busca: 142,929 Número de comparações total: 142,939
  19. 19. Referências CORMEN, T., Leiserson, C., e Rivest, R. 1997. “Introduction toAlgortihms”, em The Rabin-Karp algorithm, pp. 857-883. BAEZA-YATES, R., Frakes, W. 1992. “Information Retrieval DataStrucures & Algorithms” em String Searching Algorithms,pp. 219-237. KNUTH, D. E. The Art of Computer Programming. Massachusetts:Addison-Wesley Longman, 1997. v. 1 e 2. ZIVIANI, N. Projeto de Algoritmos - Com Implementações emPASCAL e C. São Paulo: Editora Pioneira, 1999.

×