Você está na página 1de 3

ANLISE DO ALGORITMO DE RABIN-KARP

Lorran Pegoretti Matheus Lani Regattieri Arrais Resumo: Este trabalho apresenta um estudo do algoritmo de busca exata em texto criado por Michael O. Rabin e Richard M. Karp. O Algoritmo Rabin-Karp tem caracterstica probabilstica, pois ele transforma a palavra procurada em um nmero, seguindo determinadas regras. O algoritmo tenta evitar a comparao de todos os caracteres atravs da comparao entre o hash da janela e do padro.

Palavras-chave: Algoritmo de Rabin-Karp, Tabela Hash, Comparao de Strings.

INTRODUO E DESCRIO DO ALGORITMO Como citado anteriormente, o Algoritmo Rabin-Karp tem caracterstica probabilstica, pois ele transforma a palavra procurada em um nmero, seguindo determinadas regras, que sero apresentadas posteriormente. Para a descrio do algoritmo ser utilizada a seguinte notao: n: nmero de caracteres do texto; m: nmero de caracteres da palavra; d: cardinalidade do alfabeto q: nmero primo, como: 16647133; T: string do texto;

P: string da palavra. Harrison (1971) [Cor97] sugeriu o uso de tcnicas de hashing as quais so utilizadas neste algoritmo para resgatar palavras de uma string, proposto por Rabin-Karp. Tudo que necessrio processar a funo de assinatura de cada substring de m-caracteres no texto e checar se igual assinatura da funo da palavra procurada. Karp e Rabin encontraram uma forma fcil para processar estas funes de assinatura eficientemente para a funo h(k) = k mod q, onde q um nmero primo grande. O mtodo baseado no processamento da funo de assinatura para a posio i dando o valor para a posio i 1. O algoritmo requer tempo proporcional a n + m em quase todos os casos, isto no utilizando memria virtual. Note-se que este algoritmo encontra posies no texto que tem o mesmo valor de assinatura que a palavra. Para garantir a busca, deve-se fazer uma comparao direta entre a palavra e a substring.

Este algoritmo, usa um elevado valor para q fazendo com que as colises diminuam. A probabilidade de uma coliso aleatria O(1/q). Teoricamente, este algoritmo pode ainda requerer mn passos no pior caso, checando cada busca em potencial. Em testes realizados verificou-se que apenas 3 colises em 107 [Cor97] processamentos de assinaturas, usando grandes alfabetos (). A funo de assinatura representa a string como um nmero na base-d, onde d o nmero de caracteres possveis. Para obter o valor de assinatura da prxima posio, apenas um valor constante de operaes necessrio. Na pratica, este algoritmo lento para as duas operaes de multiplicao e modulo. Entretanto, ele se torna computacionalmente vivel para grandes palavras.

PSEUDOCDIGO
Figura 1: Pseudocdigo do Algoritmo de Rabin Karp (Forma Genrica [Cor97])

O algoritmo pode ser dividido da seguinte maneira: Correspondente s linhas [1-5]. Este bloco apresenta instrues de inicializao das variveis utilizadas no cdigo. importante ressaltar que a implementao da funo hash arbitraria; Correspondente s linhas [6-8]. Este bloco constitui-se de uma iterao com ndice relacionado cardinalidade da palavra. O bloco inicializa o hash(p) da palavra e do texto, hash(t) ; Correspondente s linhas [9-14]. Neste bloco tem-se a iterao de comparao; na linha 10 em caso da comparao ser vlida 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 at encontrar a palavra(s) ou se esgotar o texto.

COMPLEXIDADE A complexidade deste algoritmo, no seu pior caso, O((n m + 1)m), podendo ser reduzida a O(nm), este caso ocorreria quando o nmero de colises fosse elevado, o que obrigaria o algoritmo a realizar um maior nmero de comparaes e operaes para se obter um novo valor de hash(t). Nos demais 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.

CONCLUSO O algoritmo de Rabin-Karp tenta diminuir o nmero de comparaes atravs do clculo de um hash da palavra procurada e da substring, porem atravs deste procedimento ele se torna probabilstico. O algoritmo vlido para qualquer alfabeto, bastando apenas interpretar cada caractere como um dgito, e na prtica tem um bom desempenho principalmente na busca de palavras grandes em textos que no esto em constante mudana.

REFERNCIAS BIBLIOGRFICAS [Cor97] 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. http://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm

Você também pode gostar