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
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.
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.
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.
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
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
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.