Você está na página 1de 19

Algoritmo de Rabin-Karp

LORRAN PEGORETTI MATHEUS LANI REGATTIERI ARRAIS

TRABALHO REALIZADO PARA AVALIAO NA DISCIPLINA DE PROJETO E ANLISE DE ALGORITMOS, DO CURSO DE CINCIA DA COMPUTAO, TURNO MATUTINO, DA UNIVERSIDADE DE VILA VELHA (UVV), MINISTRADA PELO PROFESSOR ALESSANDRO BERTOLANI. 2013

Tpicos Abordados

Descrio do Problema Original Descrio do Algoritmo Rabin-Karp Descrio de Estratgia Pseudocdigo Funcionamento do Algoritmo

Identificao dos conceitos estratgicos


Complexidade Exemplos Concluses Trabalho Similares/Futuros Referncias

Descrio do Problema Original


Busca por padro de Strings

O problema consiste em dado o texto T e o padro P encontrar todas as ocorrncias de P dentro de T. Todo s tal que T[s + 1s + m] = P [1...m], onde s o ndice de cada ocorrncia e m o tamanho do padro P. Busca em um texto dinmico atravs de um algoritmo aquele que no se tem informaes prvias sobre ele. Existem cinco algoritmos: Fora Bruta, Rabin-Karp, busca por Autmato, Knuth-Morris-Pratt e Boyer-Moore.

Descrio do Algoritmo Rabin-Karp

Trata cada substring de tamanho M do texto como uma tabela de disperso (hash).
Padro encontrado quando a chave da substring coincide com a do padro. Com tabela virtual: tamanho elevado reduz probabilidade de falsas escolhas. Evoluo do Fora Bruta, ao invs de comparar a janela com o padro caracter a caracter, proposto usar uma comparao numrica entre os restos da diviso por um mesmo inteiro da janela e do padro.

Descrio do Algoritmo

No Fora-Bruta a cada deslocamento pode acabar fazendo muitas comparaes antes de descobrir que uma janela no uma ocorrncia, no Rabin-Karp ele tenta evitar a comparao caracter a caracter das janelas que no so ocorrncias.
Quando o valor numrico da janela e do padro forem diferentes, necessariamente o contedo da janela e do padro tambm devem ser diferentes. Notao 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

Descrio da Estratgia

Ideia de Programao Dinmica e Fora-Bruta O algoritmo de Rabin-Karp usa a ideia de Impresso digital Em aplicaes envolvendo objetos longos, como por exemplo, longas cadeias de caracteres, pode-se representar tais objetos por impresses digitais curtas. Uma impresso digital pode ser um valor numrico atribudo a cada objeto por uma funo de espalhamento, por exemplo. O importante que dois objetos distintos tenham pouca chance de ter a mesma impresso digital, de maneira que, para decidir se dois tais objetos so iguais, possamos comparar no os objetos, mas suas impresses digitais

Objetivo

Atravs de tcnicas hashing processar uma funo de assinatura de cada substring de m-caracteres do texto e checar se igual assinatura da palavra procurada.

Funo: h(k) = k mod q, onde q um numero primo grande


Mtodo: baseado no processamento da funo para a posio i dando o valor para a posio i 1. Usa-se um valor elevado de q para evitar colises aleatrias. Busca-se diretamente fazer uma comparao entre a palavra e a substring

Pseudocdigo
RABIN-KARP-MATCHER (T, P, d, q) (1) n tamanho [T]; (2) m tamanho [P]; (3) h dm-1 mod q; (4) p 0;

(5) t0 0
(6) for i 1 to m (7) (8) do p (dp + P[i]) mod q; t0 (dt0 + T[i]) mod q;

(9) for s 0 to n - m

(10) do if p = ts
(11) (12) (13) (14) then if P[1..m] = T[s + 1..s + m] then Encontrou a palavra; if s < n m then ts+1 (d(ts T[s + 1]h) + T[s + m + 1]) mod q;

Funcionamento do Algoritmo

Linhas[1-5]: inicializao das variveis. importante ressaltar que a implementao da funo hash arbitraria; Linhas [6-8]: iterao com ndice relacionado cardinalidade da palavra. O bloco inicializa o hash(p) da palavra e do texto, hash(t); Linhas [9-14]: iterao de comparao; na linha 10 em caso da comparao ser valida tem a possibilidade da substring encontrada ser a procurada. Observa-se que esta linha apresenta o carter probabilstico do algoritmo. Uma comparao extra realizada para confirmar o resultado; no comparando a hash como na anterior, mas os caracteres da substring com a palavra. Em caso negativo da comparao, temos um novo valor de hash(t) para a substring, realizando a iterao ate encontrar a palavra(s) ou se esgotar o texto.

Identificao dos conceitos estratgicos

Complexidade

Pior Caso: O((n m + 1)m), podendo ser reduzida a O(nm), este caso ocorreria quando o numero de colises fosse elevado, o que obrigaria o algoritmo a realizar um maior numero de comparaes e operaes para se obter um novo valor de hash(t). Nos casos mdio e melhor: este algoritmo trabalha em O(m + n). A prova para estes casos complicada, devido principalmente ao carter probabilstico deste algoritmo, pode-se obter demonstrao em [Cor97]. Apesar de ser probabilstico este algoritmo no se apresenta eficiente na busca de textos que estejam em constante mudana, j para textos que no so modificados constantemente ele poder apresentar um desempenho melhor devido ao aproveitamento da tabela hash, para encontrar estas palavras.

Exemplo

Exemplo

Exemplo

Ao padro P = 31415 corresponde o valor decimal p = 31.415 Seja T = 123141567, ento:


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

Concluses

Tenta diminuir o numero de comparaes atravs do calculo de um hash da palavra procurada e da substring, porem atravs deste procedimento ele se torna probabilstico Os clculos de p e t0 gastam tempo O(m) Os clculos de t1, ..., tn-m mais a eventual comparao por fora-bruta, gastam tempo O((n - m)m) Numero mximo de deslocamentos s vlidos n m +1 Tempo total do algoritmo de Rabin-Karp O(nm) Na prtica, o algoritmo tem bom desempenho Ele vlido para qualquer alfabeto, bastando apenas interpretar cada caractere como um dgito

Trabalhos Similares/Futuros

Knuth-Morris-Pratt: considerado o algoritmo de fora bruta, quando ocorre uma diferena entre T[i] e P[j], evitar comparaes redundantes. Funo de falha onde o pr-processamento em P determina se seus prefixos aparecem como subsequncia dele mesmo, ser definido tambm como o tamanho o maior prefixo de P[0..k] que sufixo de P[1..k].

pr-calculado apenas o que pode ser reaproveitado comparao anterior, independente do prximo caracter .

da

Boyer-Moore: baseia-se na alta probabilidade de encontrar diferenas em alfabetos grandes, por isso, P comparado com T de trs para frente, quando se encontra uma diferena em T[i], o padro P dar um salto frente, considerando-se as comparaes j realizadas

Comparaes
Foi usado linguagem Java, S.O Ubuntu 12.04, notebook Core2Duo com 4Gb de memria.

Os resultados apresentados abaixo so correspondentes pesquisa da palavra Capitu pelo livro Dom Casmurro de Machado de Assis. A cpia utilizada possu 371.457caracteres enquanto o padro possui 6 caracteres, h 335 ocorrncias no texto.
Forca Bruta

Tempo mdio total: 6,4 ms Nmero de comparaes na busca: 745,399 Nmero de comparaes total: 745,399 Tempo mdio total: 6,8 ms Nmero de comparaes na busca: 374,405 Nmero de comparaes total: 374,405

Rabin-Karp

Comparaes

KMP

Tempo mdio total: 5,86 ms Nmero de comparaes na busca: 745,409 Nmero de comparaes total: 745,414

Boyer Moore

Tempo mdio total: 3,2 ms


Nmero de comparaes na busca: 142,929 Nmero de comparaes total: 142,939

Referncias

CORMEN, T., Leiserson, C., e Rivest, R. 1997. Introduction to Algortihms, em The Rabin-Karp algorithm, pp. 857-883. BAEZA-YATES, R., Frakes, W. 1992. Information Retrieval Data Strucures & 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 Implementaes em PASCAL e C. So Paulo: Editora Pioneira, 1999.

Você também pode gostar