SlideShare una empresa de Scribd logo
1 de 19
Algoritmo de Rabin-Karp
LORRAN PEGORETTI
MATHEUS LANI REGATTIERI ARRAIS
TRABALHO REALIZADO PARA AVALIAÇÃO NA DISCIPLINA DE PROJETO E ANÁLISE DE
ALGORITMOS, DO CURSO DE CIÊNCIA DA COMPUTAÇÃO, TURNO MATUTINO, DA
UNIVERSIDADE DE VILA VELHA (UVV), MINISTRADA PELO PROFESSOR  ALESSANDRO BERTOLANI.
2013
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
Descrição do Problema Original
Busca por padrão de Strings
 O problema consiste em dado o texto T e o padrão P encontrar
todas 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 cada
ocorrência e m é o tamanho do padrão P.
 Busca em um texto dinâmico através de um algoritmo aquele que
não se tem informações prévias sobre ele.
 Existem cinco algoritmos: Força Bruta, Rabin-Karp, busca por
Autômato, Knuth-Morris-Pratt e Boyer-Moore.
Descrição do Algoritmo Rabin-Karp
 Trata cada substring de tamanho M do texto como uma tabela de
dispersão (hash).
 Padrão é encontrado quando a chave da substring coincide com a do
padrão.
 Com tabela virtual: tamanho elevado reduz probabilidade de falsas
escolhas.
 Evolução do Força Bruta, ao invés de comparar a janela com o padrão
caracter a caracter, é proposto usar uma comparação numérica entre
os restos da divisão por um mesmo inteiro da janela e do padrão.
Descrição do Algoritmo
 No Força-Bruta a cada deslocamento pode acabar fazendo muitas
comparações antes de descobrir que uma janela não é uma
ocorrência, no Rabin-Karp ele tenta evitar a comparação caracter
a 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ém
devem 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
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 um
valor numérico atribuído a cada objeto por uma função de
espalhamento, por exemplo. O importante é que dois objetos
distintos 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
Objetivo
 Através de técnicas hashing processar uma função de assinatura
de 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 dando
o valor para a posição i – 1. Usa-se um valor elevado de q para evitar
colisões aleatórias. Busca-se diretamente fazer uma comparação entre
a palavra e a substring
Pseudocódigo
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) 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;
Funcionamento do Algoritmo
 Linhas[1-5]: inicialização das variáveis. É importante ressaltar que a
implementaçã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 da
comparação ser valida tem a possibilidade da substring encontrada ser a
procurada. Observa-se que esta linha apresenta o caráter probabilístico
do algoritmo. Uma comparação extra é realizada para confirmar o
resultado; não comparando a hash como na anterior, mas os caracteres
da substring com a palavra.
 Em caso negativo da comparação, temos um novo valor de hash(t) para
a substring, realizando a iteração ate encontrar a palavra(s) ou se esgotar
o texto.
Identificação dos conceitos
estratégicos
Complexidade
 Pior Caso: é O((n – m + 1)m), podendo ser reduzida a O(nm), este
caso ocorreria quando o numero de colisões fosse elevado, o que
obrigaria o algoritmo a realizar um maior numero de comparações e
operações para se obter um novo valor de hash(t).
 Nos casos médio e melhor: este algoritmo trabalha em O(m + n). A
prova para estes casos é complicada, devido principalmente ao
caráter probabilístico deste algoritmo, pode-se obter demonstração
em [Cor97].
 Apesar de ser probabilístico este algoritmo não se apresenta eficiente
na busca de textos que estejam em constante mudança, já para
textos que não são modificados constantemente ele poderá
apresentar um desempenho melhor devido ao aproveitamento da
tabela hash, para encontrar estas palavras.
Exemplo
Exemplo
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
Conclusões
 Tenta diminuir o numero de comparações através do calculo de um hash da palavra
procurada 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 tempo
O((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 caractere
como um dígito
Trabalhos Similares/Futuros
 Knuth-Morris-Pratt: considerado o algoritmo de “força bruta”, quando
ocorre uma diferença entre T[i] e P[j], evitar comparações
redundantes. Função de falha onde o pré-processamento em P
determina 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 da
comparação anterior, independente do próximo caracter .
 Boyer-Moore: baseia-se na alta probabilidade de encontrar diferenças
em alfabetos grandes, por isso, P é comparado com T de trás para
frente, quando se encontra uma diferença em T[i], o padrão P dará um
salto à frente, considerando-se as comparações já realizadas
Comparações
Foi usado linguagem Java, S.O Ubuntu 12.04, notebook Core2Duo
com 4Gb de memória.
Os resultados apresentados abaixo são correspondentes à pesquisa
da palavra ’Capitu’ pelo livro ’Dom Casmurro’ de Machado de Assis.
A cópia utilizada possuí 371.457caracteres enquanto o padrão possui
6 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
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
Referências
 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 Implementações em
PASCAL e C. São Paulo: Editora Pioneira, 1999.

Más contenido relacionado

La actualidad más candente

4 leis espirituais para pequenos grupos e evangelismo
4 leis espirituais para pequenos grupos e evangelismo 4 leis espirituais para pequenos grupos e evangelismo
4 leis espirituais para pequenos grupos e evangelismo
Isaias Gomes de Oliveira
 

La actualidad más candente (20)

A formação do caráter cristão - Lição 1 - 2º Trimestre 2017
A formação do caráter cristão - Lição 1 - 2º Trimestre 2017A formação do caráter cristão - Lição 1 - 2º Trimestre 2017
A formação do caráter cristão - Lição 1 - 2º Trimestre 2017
 
Lição 4 - Os Benefícios da Justificação
Lição 4 -  Os Benefícios da JustificaçãoLição 4 -  Os Benefícios da Justificação
Lição 4 - Os Benefícios da Justificação
 
Coração e rins simbologia bíblica
Coração e rins   simbologia bíblicaCoração e rins   simbologia bíblica
Coração e rins simbologia bíblica
 
AI: AI & Searching
AI: AI & SearchingAI: AI & Searching
AI: AI & Searching
 
Lição 14 - Entre a Páscoa e o Pentecostes
Lição 14 - Entre a Páscoa e o PentecostesLição 14 - Entre a Páscoa e o Pentecostes
Lição 14 - Entre a Páscoa e o Pentecostes
 
Lição 10 - Adorando a Deus em meio à Calamidade
Lição 10 - Adorando a Deus em meio à CalamidadeLição 10 - Adorando a Deus em meio à Calamidade
Lição 10 - Adorando a Deus em meio à Calamidade
 
A Formação do Caráter Cristão
A Formação do Caráter CristãoA Formação do Caráter Cristão
A Formação do Caráter Cristão
 
4 leis espirituais para pequenos grupos e evangelismo
4 leis espirituais para pequenos grupos e evangelismo 4 leis espirituais para pequenos grupos e evangelismo
4 leis espirituais para pequenos grupos e evangelismo
 
Visão de Fé e Confiança do Bem Casados
Visão de Fé e Confiança do Bem CasadosVisão de Fé e Confiança do Bem Casados
Visão de Fé e Confiança do Bem Casados
 
Evangelismo Quatro Leis
Evangelismo Quatro LeisEvangelismo Quatro Leis
Evangelismo Quatro Leis
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
 
ANJOS, HOMEM, PECADO E SALVAÇÃO (AULA 01 - BÁSICO - IBADEP)
ANJOS, HOMEM, PECADO E SALVAÇÃO (AULA 01 - BÁSICO - IBADEP)ANJOS, HOMEM, PECADO E SALVAÇÃO (AULA 01 - BÁSICO - IBADEP)
ANJOS, HOMEM, PECADO E SALVAÇÃO (AULA 01 - BÁSICO - IBADEP)
 
O pecado Imperdoavel
O pecado ImperdoavelO pecado Imperdoavel
O pecado Imperdoavel
 
Lição 9 - Uma Visão Bíblica do Corpo.pptx
Lição 9 - Uma Visão Bíblica do Corpo.pptxLição 9 - Uma Visão Bíblica do Corpo.pptx
Lição 9 - Uma Visão Bíblica do Corpo.pptx
 
LBJ 2017 3 TRI LIÇÃO 10 - O perigo do materialismo
LBJ 2017 3 TRI LIÇÃO 10 - O perigo do materialismoLBJ 2017 3 TRI LIÇÃO 10 - O perigo do materialismo
LBJ 2017 3 TRI LIÇÃO 10 - O perigo do materialismo
 
Discrete Math Lecture 02: First Order Logic
Discrete Math Lecture 02: First Order LogicDiscrete Math Lecture 02: First Order Logic
Discrete Math Lecture 02: First Order Logic
 
Colossences 1 (parte 1)
Colossences 1 (parte 1)Colossences 1 (parte 1)
Colossences 1 (parte 1)
 
A Cruz
A CruzA Cruz
A Cruz
 
apostila-cura-interior
 apostila-cura-interior apostila-cura-interior
apostila-cura-interior
 
Revistas ebd jovens - 1º Trimestre - 2017,
Revistas ebd jovens -  1º Trimestre - 2017,Revistas ebd jovens -  1º Trimestre - 2017,
Revistas ebd jovens - 1º Trimestre - 2017,
 

Destacado

Pattern matching
Pattern matchingPattern matching
Pattern matching
shravs_188
 
Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.
Júlio Rocha
 

Destacado (20)

Rabin karp string matching algorithm
Rabin karp string matching algorithmRabin karp string matching algorithm
Rabin karp string matching algorithm
 
String matching algorithms
String matching algorithmsString matching algorithms
String matching algorithms
 
Rabin Karp - String Matching Algorithm
Rabin Karp - String Matching AlgorithmRabin Karp - String Matching Algorithm
Rabin Karp - String Matching Algorithm
 
Pattern matching
Pattern matchingPattern matching
Pattern matching
 
Algoritmo de Rabin-Karp - Artigo
Algoritmo de Rabin-Karp - ArtigoAlgoritmo de Rabin-Karp - Artigo
Algoritmo de Rabin-Karp - Artigo
 
String matching algorithms
String matching algorithmsString matching algorithms
String matching algorithms
 
Naive String Matching Algorithm | Computer Science
Naive String Matching Algorithm | Computer ScienceNaive String Matching Algorithm | Computer Science
Naive String Matching Algorithm | Computer Science
 
KMP Pattern Matching algorithm
KMP Pattern Matching algorithmKMP Pattern Matching algorithm
KMP Pattern Matching algorithm
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método Guloso
 
25 String Matching
25 String Matching25 String Matching
25 String Matching
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenação
 
Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.
 
String kmp
String kmpString kmp
String kmp
 
Pattern matching in ds by m anoj vasava=mca
Pattern matching in ds by m anoj vasava=mcaPattern matching in ds by m anoj vasava=mca
Pattern matching in ds by m anoj vasava=mca
 
String matching algorithms
String matching algorithmsString matching algorithms
String matching algorithms
 
Algoritma Pencarian String matching
Algoritma Pencarian String matching Algoritma Pencarian String matching
Algoritma Pencarian String matching
 
Kmp
KmpKmp
Kmp
 
String Match | Computer Science
String Match | Computer ScienceString Match | Computer Science
String Match | Computer Science
 
06. string matching
06. string matching06. string matching
06. string matching
 
String Matching Finite Automata & KMP Algorithm.
String Matching Finite Automata & KMP Algorithm.String Matching Finite Automata & KMP Algorithm.
String Matching Finite Automata & KMP Algorithm.
 

Similar a Algoritmo de Rabin-Karp

Aula de programacao_final.dizando
Aula de programacao_final.dizandoAula de programacao_final.dizando
Aula de programacao_final.dizando
João Gomes
 
Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...
Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...
Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...
UFAM - Universidade Federal do Amazonas
 
Progress%c3 o aritm%c9tica[1]
Progress%c3 o aritm%c9tica[1]Progress%c3 o aritm%c9tica[1]
Progress%c3 o aritm%c9tica[1]
daniana
 

Similar a Algoritmo de Rabin-Karp (20)

Metódos de Pesquisa em C
Metódos de Pesquisa em CMetódos de Pesquisa em C
Metódos de Pesquisa em C
 
UFG - Topic Modeling in Text
UFG - Topic Modeling in TextUFG - Topic Modeling in Text
UFG - Topic Modeling in Text
 
01 logica
01 logica01 logica
01 logica
 
Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)
 
Capítulo 12 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 12 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 12 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 12 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
Algoritmos e Programação: Manipulação de strings
Algoritmos e Programação: Manipulação de stringsAlgoritmos e Programação: Manipulação de strings
Algoritmos e Programação: Manipulação de strings
 
Matemática - Progressão Aritmética - www.CentroApoio.com - Vídeo Aula
Matemática - Progressão Aritmética  - www.CentroApoio.com - Vídeo AulaMatemática - Progressão Aritmética  - www.CentroApoio.com - Vídeo Aula
Matemática - Progressão Aritmética - www.CentroApoio.com - Vídeo Aula
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Python introdução a linguagem de programação
Python introdução a linguagem de programaçãoPython introdução a linguagem de programação
Python introdução a linguagem de programação
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintótica
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmos
 
Aula de programacao_final.dizando
Aula de programacao_final.dizandoAula de programacao_final.dizando
Aula de programacao_final.dizando
 
Estrutura de Dados Apoio (Complexidade de Algoritmos)
Estrutura de Dados Apoio (Complexidade de Algoritmos)Estrutura de Dados Apoio (Complexidade de Algoritmos)
Estrutura de Dados Apoio (Complexidade de Algoritmos)
 
02 1 algoritmos
02 1 algoritmos02 1 algoritmos
02 1 algoritmos
 
Pesquisa sequencial
Pesquisa sequencialPesquisa sequencial
Pesquisa sequencial
 
Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...
Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...
Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes median...
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Algoritmos e Programação_01
Algoritmos e Programação_01Algoritmos e Programação_01
Algoritmos e Programação_01
 
Lista Exercicios 05
Lista Exercicios 05Lista Exercicios 05
Lista Exercicios 05
 
Progress%c3 o aritm%c9tica[1]
Progress%c3 o aritm%c9tica[1]Progress%c3 o aritm%c9tica[1]
Progress%c3 o aritm%c9tica[1]
 

Algoritmo de Rabin-Karp

  • 1. Algoritmo de Rabin-Karp LORRAN PEGORETTI MATHEUS LANI REGATTIERI ARRAIS TRABALHO REALIZADO PARA AVALIAÇÃO NA DISCIPLINA DE PROJETO E ANÁLISE DE ALGORITMOS, DO CURSO DE CIÊNCIA DA COMPUTAÇÃO, TURNO MATUTINO, DA UNIVERSIDADE DE VILA VELHA (UVV), MINISTRADA PELO PROFESSOR  ALESSANDRO BERTOLANI. 2013
  • 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. Descrição do Problema Original Busca por padrão de Strings  O problema consiste em dado o texto T e o padrão P encontrar todas 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 cada ocorrência e m é o tamanho do padrão P.  Busca em um texto dinâmico através de um algoritmo aquele que não se tem informações prévias sobre ele.  Existem cinco algoritmos: Força Bruta, Rabin-Karp, busca por Autômato, Knuth-Morris-Pratt e Boyer-Moore.
  • 4. Descrição do Algoritmo Rabin-Karp  Trata cada substring de tamanho M do texto como uma tabela de dispersão (hash).  Padrão é encontrado quando a chave da substring coincide com a do padrão.  Com tabela virtual: tamanho elevado reduz probabilidade de falsas escolhas.  Evolução do Força Bruta, ao invés de comparar a janela com o padrão caracter a caracter, é proposto usar uma comparação numérica entre os restos da divisão por um mesmo inteiro da janela e do padrão.
  • 5. Descrição do Algoritmo  No Força-Bruta a cada deslocamento pode acabar fazendo muitas comparações antes de descobrir que uma janela não é uma ocorrência, no Rabin-Karp ele tenta evitar a comparação caracter a 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ém devem 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. 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 um valor numérico atribuído a cada objeto por uma função de espalhamento, por exemplo. O importante é que dois objetos distintos 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. Objetivo  Através de técnicas hashing processar uma função de assinatura de 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 dando o valor para a posição i – 1. Usa-se um valor elevado de q para evitar colisões aleatórias. Busca-se diretamente fazer uma comparação entre a palavra e a substring
  • 8. Pseudocódigo 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) 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. Funcionamento do Algoritmo  Linhas[1-5]: inicialização das variáveis. É importante ressaltar que a implementaçã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 da comparação ser valida tem a possibilidade da substring encontrada ser a procurada. Observa-se que esta linha apresenta o caráter probabilístico do algoritmo. Uma comparação extra é realizada para confirmar o resultado; não comparando a hash como na anterior, mas os caracteres da substring com a palavra.  Em caso negativo da comparação, temos um novo valor de hash(t) para a substring, realizando a iteração ate encontrar a palavra(s) ou se esgotar o texto.
  • 11. Complexidade  Pior Caso: é O((n – m + 1)m), podendo ser reduzida a O(nm), este caso ocorreria quando o numero de colisões fosse elevado, o que obrigaria o algoritmo a realizar um maior numero de comparações e operações para se obter um novo valor de hash(t).  Nos casos médio e melhor: este algoritmo trabalha em O(m + n). A prova para estes casos é complicada, devido principalmente ao caráter probabilístico deste algoritmo, pode-se obter demonstração em [Cor97].  Apesar de ser probabilístico este algoritmo não se apresenta eficiente na busca de textos que estejam em constante mudança, já para textos que não são modificados constantemente ele poderá apresentar um desempenho melhor devido ao aproveitamento da tabela hash, para encontrar estas palavras.
  • 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. Conclusões  Tenta diminuir o numero de comparações através do calculo de um hash da palavra procurada 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 tempo O((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 caractere como um dígito
  • 16. Trabalhos Similares/Futuros  Knuth-Morris-Pratt: considerado o algoritmo de “força bruta”, quando ocorre uma diferença entre T[i] e P[j], evitar comparações redundantes. Função de falha onde o pré-processamento em P determina 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 da comparação anterior, independente do próximo caracter .  Boyer-Moore: baseia-se na alta probabilidade de encontrar diferenças em alfabetos grandes, por isso, P é comparado com T de trás para frente, quando se encontra uma diferença em T[i], o padrão P dará um salto à frente, considerando-se as comparações já realizadas
  • 17. Comparações Foi usado linguagem Java, S.O Ubuntu 12.04, notebook Core2Duo com 4Gb de memória. Os resultados apresentados abaixo são correspondentes à pesquisa da palavra ’Capitu’ pelo livro ’Dom Casmurro’ de Machado de Assis. A cópia utilizada possuí 371.457caracteres enquanto o padrão possui 6 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. 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. Referências  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 Implementações em PASCAL e C. São Paulo: Editora Pioneira, 1999.