SlideShare une entreprise Scribd logo
1  sur  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.

Contenu connexe

Tendances

Usage of regular expressions in nlp
Usage of regular expressions in nlpUsage of regular expressions in nlp
Usage of regular expressions in nlpeSAT Journals
 
LUMIERE 2 Alphaville Lagoa dos Ingleses
LUMIERE 2 Alphaville Lagoa dos InglesesLUMIERE 2 Alphaville Lagoa dos Ingleses
LUMIERE 2 Alphaville Lagoa dos InglesesRonaldo Roscoe
 
Slides- Progressão Geométrica
Slides- Progressão GeométricaSlides- Progressão Geométrica
Slides- Progressão GeométricaKetlin Cavane
 
A origem dos números
A origem dos númerosA origem dos números
A origem dos númerosilzavrg
 
Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenaçãoDaiana de Ávila
 
1 -apostila_de_engenharia_de_avaliaes
1  -apostila_de_engenharia_de_avaliaes1  -apostila_de_engenharia_de_avaliaes
1 -apostila_de_engenharia_de_avaliaesadalberto miran
 
Problemas função exponencial
Problemas   função exponencialProblemas   função exponencial
Problemas função exponencialPéricles Penuel
 
Regras de sinais
 Regras de sinais Regras de sinais
Regras de sinaiscs_lucindo
 
Cesgranrio banco do brasil 2018
Cesgranrio banco do brasil 2018Cesgranrio banco do brasil 2018
Cesgranrio banco do brasil 2018Arthur Lima
 
Trigonometria exercícios resolvidos e teoria
Trigonometria   exercícios resolvidos e teoriaTrigonometria   exercícios resolvidos e teoria
Trigonometria exercícios resolvidos e teoriatrigono_metria
 
MATEMATICA_Ciencia_Aplicacoes_V1_PNLD2018_PR.pdf
MATEMATICA_Ciencia_Aplicacoes_V1_PNLD2018_PR.pdfMATEMATICA_Ciencia_Aplicacoes_V1_PNLD2018_PR.pdf
MATEMATICA_Ciencia_Aplicacoes_V1_PNLD2018_PR.pdfSilvanioRodriguesCos
 
Progressão geométrica
Progressão geométricaProgressão geométrica
Progressão geométricarosania39
 
Metodos Busqueda Interna
Metodos Busqueda InternaMetodos Busqueda Interna
Metodos Busqueda Internasawmuk
 

Tendances (20)

Tipos de algoritmos
Tipos de algoritmosTipos de algoritmos
Tipos de algoritmos
 
Usage of regular expressions in nlp
Usage of regular expressions in nlpUsage of regular expressions in nlp
Usage of regular expressions in nlp
 
LUMIERE 2 Alphaville Lagoa dos Ingleses
LUMIERE 2 Alphaville Lagoa dos InglesesLUMIERE 2 Alphaville Lagoa dos Ingleses
LUMIERE 2 Alphaville Lagoa dos Ingleses
 
Potencias e raizes
Potencias e raizesPotencias e raizes
Potencias e raizes
 
Dinamica fabrica avioes 2.0
Dinamica fabrica avioes 2.0Dinamica fabrica avioes 2.0
Dinamica fabrica avioes 2.0
 
String matching algorithms
String matching algorithmsString matching algorithms
String matching algorithms
 
Slides- Progressão Geométrica
Slides- Progressão GeométricaSlides- Progressão Geométrica
Slides- Progressão Geométrica
 
A origem dos números
A origem dos númerosA origem dos números
A origem dos números
 
Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenação
 
1 -apostila_de_engenharia_de_avaliaes
1  -apostila_de_engenharia_de_avaliaes1  -apostila_de_engenharia_de_avaliaes
1 -apostila_de_engenharia_de_avaliaes
 
05 regra de cramer
05   regra de cramer05   regra de cramer
05 regra de cramer
 
Problemas função exponencial
Problemas   função exponencialProblemas   função exponencial
Problemas função exponencial
 
Regras de sinais
 Regras de sinais Regras de sinais
Regras de sinais
 
Cesgranrio banco do brasil 2018
Cesgranrio banco do brasil 2018Cesgranrio banco do brasil 2018
Cesgranrio banco do brasil 2018
 
String matching algorithm
String matching algorithmString matching algorithm
String matching algorithm
 
Matemática básica
Matemática básicaMatemática básica
Matemática básica
 
Trigonometria exercícios resolvidos e teoria
Trigonometria   exercícios resolvidos e teoriaTrigonometria   exercícios resolvidos e teoria
Trigonometria exercícios resolvidos e teoria
 
MATEMATICA_Ciencia_Aplicacoes_V1_PNLD2018_PR.pdf
MATEMATICA_Ciencia_Aplicacoes_V1_PNLD2018_PR.pdfMATEMATICA_Ciencia_Aplicacoes_V1_PNLD2018_PR.pdf
MATEMATICA_Ciencia_Aplicacoes_V1_PNLD2018_PR.pdf
 
Progressão geométrica
Progressão geométricaProgressão geométrica
Progressão geométrica
 
Metodos Busqueda Interna
Metodos Busqueda InternaMetodos Busqueda Interna
Metodos Busqueda Interna
 

En vedette

Rabin karp string matching algorithm
Rabin karp string matching algorithmRabin karp string matching algorithm
Rabin karp string matching algorithmGajanand Sharma
 
Rabin Karp - String Matching Algorithm
Rabin Karp - String Matching AlgorithmRabin Karp - String Matching Algorithm
Rabin Karp - String Matching AlgorithmSyed Owais Ali Chishti
 
Pattern matching
Pattern matchingPattern matching
Pattern matchingshravs_188
 
Algoritmo de Rabin-Karp - Artigo
Algoritmo de Rabin-Karp - ArtigoAlgoritmo de Rabin-Karp - Artigo
Algoritmo de Rabin-Karp - ArtigoLorran Pegoretti
 
String matching algorithms(knuth morris-pratt)
String matching algorithms(knuth morris-pratt)String matching algorithms(knuth morris-pratt)
String matching algorithms(knuth morris-pratt)Neel Shah
 
Naive String Matching Algorithm | Computer Science
Naive String Matching Algorithm | Computer ScienceNaive String Matching Algorithm | Computer Science
Naive String Matching Algorithm | Computer ScienceTransweb Global Inc
 
KMP Pattern Matching algorithm
KMP Pattern Matching algorithmKMP Pattern Matching algorithm
KMP Pattern Matching algorithmKamal Nayan
 
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 GulosoDelacyr Ferreira
 
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çãoGustavo Carvalho
 
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
 
String kmp
String kmpString kmp
String kmpthinkphp
 
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=mcaManoj_vasava
 
Algoritma Pencarian String matching
Algoritma Pencarian String matching Algoritma Pencarian String matching
Algoritma Pencarian String matching Kukuh Setiawan
 
String Matching Finite Automata & KMP Algorithm.
String Matching Finite Automata & KMP Algorithm.String Matching Finite Automata & KMP Algorithm.
String Matching Finite Automata & KMP Algorithm.Malek Sumaiya
 

En vedette (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(knuth morris-pratt)
String matching algorithms(knuth morris-pratt)String matching algorithms(knuth morris-pratt)
String matching algorithms(knuth morris-pratt)
 
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.
 

Similaire à Algoritmo de Rabin-Karp

Metódos de Pesquisa em C
Metódos de Pesquisa em CMetódos de Pesquisa em C
Metódos de Pesquisa em Crodolfoeyalana
 
UFG - Topic Modeling in Text
UFG - Topic Modeling in TextUFG - Topic Modeling in Text
UFG - Topic Modeling in TextMarlesson Santana
 
Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Danilo Pinotti
 
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...Os Fantasmas !
 
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 stringsAlex Camargo
 
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 AulaVídeo Aulas Apoio
 
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çãoAlysonTrindadeFernan
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintóticaPablo Silva
 
Aula de programacao_final.dizando
Aula de programacao_final.dizandoAula de programacao_final.dizando
Aula de programacao_final.dizandoJoão Gomes
 
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)Leinylson Fontinele
 
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
 
Algoritmos e Programação_01
Algoritmos e Programação_01Algoritmos e Programação_01
Algoritmos e Programação_01Gabriel Demétrio
 
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
 
Algoritmo e Complexidade - texto Aula1.docx
Algoritmo e Complexidade - texto Aula1.docxAlgoritmo e Complexidade - texto Aula1.docx
Algoritmo e Complexidade - texto Aula1.docxLdiaSilva39
 

Similaire à 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
 
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 e Complexidade - texto Aula1.docx
Algoritmo e Complexidade - texto Aula1.docxAlgoritmo e Complexidade - texto Aula1.docx
Algoritmo e Complexidade - texto Aula1.docx
 

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.