Buscar

Busca em Cadeia de Caracteres

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 64 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 64 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 64 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Prof. Marcelo Otone Aguiar 
marcelo.aguiar@ufes.br 
www.marceloaguiar.pro.br 
Universidade Federal do Espírito Santo 
Centro de Ciências Exatas, Naturais e de Saúde – CCENS-UFES 
Departamento de Computação 
 
 
Busca em Cadeia de Caracteres 
Estrutura de Dados II 
 
COM10078 - Estrutura de Dados II 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
- Busca em cadeia de caracteres 
‣Força bruta; 
‣Algoritmo de Knuth-Morris-Pratt; 
‣Algoritmo de Boyer-Moore; 
‣Árvore Trie; 
‣Árvore PATRICIA; 
Conteúdo Programático da Disciplina 
2 
C.H. Prevista 
14 horas 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Conceitos Gerais 
• Uma cadeia de caracteres corresponde a uma sequência 
de elementos denominados caracteres. 
• Os caracteres são escolhidos de um conjunto denominado 
alfabeto. 
• Por exemplo, em uma cadeia de bits, o alfabeto é {0, 1}. 
• A pesquisa em cadeias de caracteres é um componente 
importante em diversos problemas computacionais, tais 
como edição de texto, recuperação de informação e 
estudo de sequências de DNA em biologia computacional. 
3 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Conceitos Gerais 
• Em programas editores de texto, o usuário pode estar 
interessado em buscar todas as ocorrências de um 
padrão (uma palavra particular) no texto que está sendo 
editado. 
• Esse problema é conhecido como casamento de cadeia 
de caracteres ou casamento de padrão (pattern 
matching) 
• O problema de casamento de cadeias ou casamento de 
padrão pode ser formalizado como se segue: 
4 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Conceitos Gerais 
• O texto é um arranjo T[1..n] de tamanho n 
• O padrão é um arranjo P[1..m] de tamanho m <= n 
• Os elementos de P e T são escolhidos de um alfabeto 
finito ∑ de tamanho c. 
• Exemplo, podemos ter: 
∑ = {0, 1} ou ∑ = {a, b, ..., z} 
• Dadas duas cadeias P (padrão) de comprimento |P| = m e 
T (texto) de comprimento |T| = n, em que n > m, deseja-
se saber as ocorrências de P em T. 
5 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Conceitos Gerais 
• Considerando os dados de entrada como sendo o texto T 
e o padrão P, temos as seguintes categorias de 
algoritmos: 
• Padrão e texto não são pré-processados: os algoritmos 
são do tipo sequencial, on-line e de tempo-real, pois tanto 
o padrão quanto o texto não são conhecidos a priori. 
• Estes algoritmos têm complexidade de tempo O(mn) para 
o pior caso. 
• Um exemplo é o algoritmo força bruta. 
6 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Conceitos Gerais 
• Padrão pré-processado: os algoritmos são do tipo 
sequencial e o padrão é conhecido anteriormente, o que 
permite o seu pré-processamento. 
• Estes algoritmos têm complexidade de tempo O(n) para o 
pior caso. 
• Representantes típicos desta categoria são os programas 
para edição de textos. 
• Os algoritmos mais conhecidos nesta categoria são o 
Knuth-Morris e Pratt, o Boyer-Moore e o Shif-And. 
7 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Conceitos Gerais 
• Padrão e texto são pré-processado: os algoritmos 
constroem um índice para permitir uma complexidade de 
tempo O(log n) ou menos. O tempo de pré-
processamento do texto para obter o índice pode ser tão 
grande quanto O(n) ou O(n log n), mas esse tempo é 
compensado por muitas operações de pesquisa no texto. 
Vale a pena construir um índice quando a base de dados 
é grande e semiestática. 
• Os tipos de índices mais conhecidos são os arquivos 
invertidos, árvores trie e Patricia, e arranjos de 
sufixos. 
8 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Casamento Exato 
• No casamento de padrão, o problema básico consiste em 
obter todas as ocorrências exatas do padrão no texto. 
• Os algoritmos para o casamento exato, em geral, 
funcionam em dois enfoques: 
• O primeiro consiste em ler os caracteres do texto um a 
um e, a cada passo, algumas variáveis são atualizadas 
de forma a identificar uma ocorrência possível. 
• Algoritmos: força bruta e o Knuth-Morris-Pratt 
9 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Casamento Exato 
• Os algoritmos para o casamento exato, em geral, 
funcionam em dois enfoques (continuação): 
• O segundo enfoque consiste em pesquisar o padrão P 
em uma janela que desliza ao longo do texto T. 
• Para cada posição desta janela, o algoritmo faz uma 
pesquisa por um sufixo da janela que casa com um 
sufixo de P, mediante comparações realizadas no 
sentido da direita para a esquerda. 
• Algoritmo: Boyer-Moore. 
10 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
 
 
BREVE HISTÓRICO 
11 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Breve Histórico 
• Em 1970, S. A. Cook provou um resultado 
teórico sobre um tipo particular de autômato que implicava 
na existência de um algoritmo de casamento de padrão 
com tempo proporcional a M + N no pior caso. 
• D. E. Knuth e V. R. Pratt seguindo a construção que Cook 
usara na demonstração do seu teorema obtiveram um 
algoritmo relativamente simples e prático. 
• Ocorreu também que J. H. Morris descobriu praticamente 
o mesmo algoritmo como solução de um problema de 
edição de texto. 
• Os três cientistas, Knuth, Morris e Pratt, não se 
preocuparam em publicar o algoritmo até 1976. 
12 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Breve Histórico 
• Nesse meio tempo, R. S. Boyer e J. S. Moore (e, 
independentemente, R. W. Gosper) descobriram um 
algoritmo que é muito mais rápido em muitas aplicações. 
• Muitos editores de texto usam esse algoritmo 
para busca de cadeias. 
• Em 1980, M. O. Rabin e R. M. Karp desenvolveram um 
algoritmo tão simples quanto o de força bruta que roda 
virtualmente sempre em tempo proporcional a M + N. 
• Além disso, o algoritmo deles estende-se facilmente a 
padrões bidimensionais que o torna mais útil que os 
outros para processamento de figuras. 
13 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
 
 
FORÇA BRUTA 
14 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
CEN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Força Bruta 
15 
• O algoritmo força bruta é o algoritmo mais simples para 
casamento de cadeias. 
• A ideia consiste em tentar casar qualquer subcadeia no 
texto de comprimento m com o padrão. 
• O pior caso do algoritmo força bruta é: 
Cn = m x n, 
Situação que ocorre, por exemplo, quando P = aab e 
 T = aaaaaaaaaa 
• Embora as cadeias que aparecem em muitas aplicações 
levam a um tempo de execução que é virtualmente 
proporcional a M + N 
 
 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Força Bruta 
16 
• Basicamente este algoritmo faz dois laços aninhados, 
sendo que, o laço externo pesquisa todos os possíveis 
índices do padrão dentro do texto, e o laço interno 
pesquisa cada caractere do padrão, comparando-o a seu 
correspondente potencial no texto. 
• O pior caso de tempo de procura não é bom, pois para 
cada índice-candidato em T pode-se realizar até m 
comparações de caracteres para descobrir que P não é 
igual a T começando no índice atual. 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Força Bruta 
Supondo que se recebe a cadeia de caracteres: 
T = “abacaabaccabacabaabb” 
P = “abacab” 
a b a c a a b a c c a b a c a b a a b b 
1 2 3 4 5 6 
a b a c a b 
7 
a b a c a b 
8 9 
a b a c a b 
1
0 
1
1 
1
2 
1
3 
a b a c a b 2
2 
2
3 
2
4 
2
5 
2
6 
2
7 
a b a c a b 
17 
Quantidade de comparações 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Pseudo-código 
Entrada: as cadeias T (texto) com n caracteres e P (padrão) com m 
caracteres 
Saída: o índice da primeira substring de T igual a P, ou uma 
indicação de que P não é uma substring de T 
para i<-0 até n-m {para cada índice candidato em T} faça 
 j <- 0 
 enquanto (j < m e T[i + j] = P[j]) faça 
 j <- j + 1 
 se j = m então 
 retorna i 
 retorna “Não existe substring em T igual a P.” 
18 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Desafio 
• Com o conhecimento que você possui da 
linguagem C e do funcionamento da busca por 
força bruta, implemente um algoritmo em C 
para este tipo de pesquisa. 
19 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
 
 
Algoritmo Knuth-Morris-Pratt 
20 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Knuth-Morris-Pratt (KMP) 
• É o primeiro algoritmo cujo pior caso tem complexidade de 
tempo linear no tamanho do texto. 
• É um dos algoritmos mais famosos para resolver o 
problema de casamento de cadeias. 
• O algoritmo foi inventado por Donald Knuth e Vaughan 
Pratt e independentemente por James Morris em 1977, 
embora os três tenham-no publicado conjuntamente. 
• Ele tem uma implementação complicada, e na prática 
perde em eficiência para os algoritmos Shift-And e 
Boyer-Moore-Horspool. 
21 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Knuth-Morris-Pratt (KMP) 
• Procura um padrão em um texto 
• String searching algorithm 
• Pouco código e muito eficiente 
• Complexidade no pior caso é O(n), ou seja é linear 
• A ideia geral é: 
• Quando aparece uma diferença (conflito), a palavra tem em si
 a informação necessária para determinar onde começar a 
próxima comparação (isso evita retroceder pelos caracteres já 
conhecidos) 
• Duas etapas: 
• Função prefixo 
• Função de comparação 
22 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Knuth-Morris-Pratt (KMP) 
• Exemplo com texto CAABAABAAAA e padrão AABAAA: 
• Depois do conflito entre txt[6] e pat[5], não precisamos 
retroceder no texto: podemos continuar e comparar 
txt[7..] com pat[3..]: 
 C A A B A A B A A A A 
 uma tentativa: A A B A A A 
não precisa tentar: A A B A A A 
 não precisa tentar: A A B A A A 
 próxima tentativa: A A B A A A 
23 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Função prefixo 
• É feito um pré-processamento do padrão e construído um 
vetor auxiliar de tamanho m. 
• O pré-processamento analisa todos os prefixos do padrão 
procurando pelo maior sufixo destes prefixos que também 
seja prefixo. 
• Desta forma, evita que um caractere seja reexaminado. 
• Ao final, teremos um vetor que conterá cada posição que 
gera um prefixo para cada posição do padrão. 
• O pré-processamento é realizado no padrão para 
determinar se seus prefixos aparecem como 
subsequências deles mesmos. 
24 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Função prefixo 
25 
A B C D A B C A 
j i i i i 
0 1 2 3 4 5 6 7 
-1 -1 -1 -1 0 
A == B? não, coloca -1 na posição marcada por “i” e incrementa “i” 
Depois, A == C? e assim sucessivamente... 
 
Se sim, então incrementa “j”, guarda o valor de “j” na posição marcada por “i” 
e incrementa o “i” 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Função prefixo 
26 
A B C D A B C A 
j i 
0 1 2 3 4 5 6 7 
-1 -1 -1 -1 0 1 
A == B? não, coloca -1 na posição marcada por “i” e incrementa “i” 
Depois, A == C? e assim sucessivamente... 
 
Se sim, então incrementa “j”, guarda o valor de “j” na posição marcada por “i” 
e incrementa o “i” 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Função prefixo 
27 
A B C D A B C A 
j i 
0 1 2 3 4 5 6 7 
-1 -1 -1 -1 0 1 2 
A == B? não, coloca -1 na posição marcada por “i” e incrementa “i” 
Depois, A == C? e assim sucessivamente... 
 
Se sim, então incrementa “j”, guarda o valor de “j” na posição marcada por “i” 
e incrementa o “i” 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Função prefixo 
28 
A B C D A B C A 
j i 
0 1 2 3 4 5 6 7 
-1 -1 -1 -1 0 1 2 
A == B? não, coloca -1 na posição marcada por “i” e incrementa “i” 
Depois, A == C? e assim sucessivamente... 
 
Se sim, então incrementa “j”, guarda o valor de “j” na posição marcada por “i” 
e incrementa o “i” 
 
Se “j” é diferente de -1, então podemos fazer j = aux[j], ou seja, J = 0, 
não incrementa o “i” e nem o “j” 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Função prefixo 
29 
A B C D A B C A 
j i 
0 1 2 3 4 5 6 7 
-1 -1 -1 -10 1 2 0 
Volta então o “j” na posição inicial e verifica: 
A == A? sim, incrementa “j”, guarda o valor de “j” na posição marcada por “i” e 
incrementa o “i” 
 
I = 8, ou seja, não é menor do que o tamanho da palavra ABCDABCA, 
portanto, chegamos ao fim da execução. 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Pseudo-código pré-processamento 
Entrada: as cadeias P (padrão) com m caracteres e tabela para 
armazenamento dos prefixos 
Saída: tabela com prefixos armazenados 
i <- 1 
j <- -1 
aux[0] = j 
para (i<-1 até m-1) faça 
 enquanto (j > -1 e P[j+1] <> P[i]) faça 
 j <- aux[j] 
 
 se (P[i] = P[j+1]) 
 j <- j + 1 
 
 aux[i] = j 
retorna aux 
30 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Exemplo Busca 
Supondo que se recebe a cadeia de caracteres: 
T = “abacaabaccabacabaabb” 
P = “abacab” 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 
a b a c a a b a c c a b a c a b a a b b 
0 1 2 3 4 5 
a b a c a b 
31 
j 0 1 2 3 4 5 
P[j] a b a c a b 
F(j) -1 -1 0 -1 0 1 
0 1 2 3 4 5 
a b a c a b 
mismatching, K=0 
mismatching, K=-1 
0 1 2 3 4 5 
a b a c a b 
matching 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Pseudo-código Busca 
Entrada: as cadeias T (texto) com n caracteres e P (padrão) com m 
caracteres 
Saída: o índice da primeira substring de T igual a P, ou uma 
indicação de que P não é uma substring de T 
aux[m] 
preKMP(P, aux) 
k = -1 
para (i<-0 até n - 1) faça 
 enquanto (k > -1 e P[k+1] <> T[i]) faça 
 k <- aux[k] 
 
 se (T[i] = P[k+1]) então 
 k <- k + 1 
 
 se (k = m - 1) então 
 retorna i-k 
32 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Desafio 
• Implemente um algoritmo em C para a 
pesquisa KMP. 
• Você deverá implementar o pré-
processamento e a busca. 
33 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
 
 
Algoritmo Boyer-Moore 
34 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Algoritmo BM 
• Também chamado de Boyer-Moore. 
• Pela extrema simplicidade de implementação e 
comprovada eficiência, o BM deve ser escolhido em 
aplicações de uso geral que necessitam realizar 
casamento exato de cadeias. 
• A idéia é pesquisar no padrão no sentido da direita para a 
esquerda, o que torna o algoritmo muito rápido. 
• Executado frequentemente em editores de texto para os 
comandos de “localizar” e “substituir”. 
35 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Algoritmo BM 
• O algoritmo faz a varredura dos símbolos do 
padrão da direita para à esquerda (rightmost). 
• O algoritmo utiliza duas funções pré-processadas 
para deslocar o padrão à direita. 
• Estas funções dos deslocamentos são chamadas 
funções de ocorrência e de casamento. 
36 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Algoritmo BM 
• O enfoque do algoritmo BM consiste em pesquisar o 
padrão P em uma janela que desliza ao longo do texto T. 
• Para cada posição desta janela, o algoritmo faz uma 
pesquisa por um sufixo da janela que casa com um sufixo 
de P por meio de comparações realizadas no sentido da 
direita para a esquerda. 
• Se não ocorreu uma desigualdade, então uma ocorrência 
de P em T foi encontrada. 
• Senão, o algoritmo calcula um deslocamento em que o 
padrão deve ser deslizado para a direita antes que uma 
nova tentativa de casamento se inicie. 
37 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Algoritmo BM 
• O algoritmo BM original propõe duas heurísticas para 
calcular o deslocamento: 
• Heurística ocorrência: alinha a posição no texto que 
causou a colisão com o primeiro caractere no padrão 
que casar com ele. 
• Heurística casamento: ao mover o padrão para a 
direita, ele casa com o pedaço do texto anteriormente 
casado. 
38 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Heurística de ocorrência 
• Alinha a posição que causou a colisão no texto com o 
primeiro caractere no padrão que casa com este 
caractere; 
Ex.: P ={cacbac}, T ={aabcaccacbac}. 
 
 
39 
1 2 3 4 5 6 7 8 9 0 1 2 
a a b c a c c a c b a c 
c a c b a c 
c a c b a c 
c a c b a c 
c a c b a c 
c a c b a c 
A partir da posição 6 há uma 
colisão na posição 4. 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Heurística de casamento 
• Alinha a posição que causou a colisão no texto com o 
pedaço do padrão anteriormente casado; 
Ex.: P ={cacbac}, T ={aabcaccacbac}. 
 
 
40 
1 2 3 4 5 6 7 8 9 0 1 2 
a a b c a c c a c b a c 
c a c b a c 
c a c b a c 
c a c b a c 
A partir da posição 6 há uma coli
são na posição 4. 
Desloca o padrão até o 
próximo casamento. 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Algoritmo BM 
• O algoritmo BM decide qual das duas heurísticas deve 
usar escolhendo a que provoca o maior deslocamento do 
padrão. 
• Essa escolha implica realizar a comparação entre dois 
inteiros para cada caractere lido do texto, penalizando o 
desempenho do algoritmo com relação ao tempo de 
processamento. 
• A partir dessa observação, várias propostas de 
simplificação ocorreram ao longo dos anos, e os melhores 
resultados são os que consideram apenas a heurística 
ocorrência. 
41 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Algoritmo BMH 
• A simplificação mais importante é obra de Horspool 
(1980), conhecida como Boyer-Moore-Horspool (BMH), 
que executa mais rápido do que o algoritmo BM original. 
• Horspool observou que qualquer caractere já lido do texto 
a partir do último deslocamento pode ser usado para 
endereçar a tabela de deslocamentos. 
• Baseado neste fato, Horspool propôs endereçar a tabela 
com o caractere no texto correspondente ao último 
caractere do padrão. 
42 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Pseudo-código 
Entrada: as cadeias T (texto) com n caracteres e P (padrão) com m caracteres 
Saída: o índice da primeira substring de T igual a P, ou uma indicação de que P 
não é uma substring de T 
 
para j<-0 até j < 255 faça tabela[j] = m 
para j<-1 até j<m faça tabela[P[j-1]] = m – j 
i = m 
enquanto(i <= n) faça 
 k <- i 
 j <- m 
 enquanto (T[k-1] = P[j-1] e j > 0) faça 
 k <- k -1 
 j <- j -1 
 fimenquanto 
 
 se (j = 0) então 
 retorna k+1 
 i <- i + tabela[T[i-1]] 
fimenquanto 
retorna “Não existe substring em T igual a P.” 
43 
P[j-1] 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Desafio 
• Implemente um algoritmo em C para a 
pesquisa BMH. 
 
• Faça o teste com o texto = {aabcaccacbac} e 
o padrão = {cacbac} e apresente o número de 
instruções que foram executadas na busca 
pelo padrão. 
44 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Pesquisa Digital 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Pesquisa Digital 
• A pesquisa digital é baseada na representação das 
chaves como uma sequência de caracteres ou de dígitos. 
• O método de pesquisa digital é realizado da mesma forma 
que uma pesquisa em dicionários que possuem aqueles 
“índices de dedo”. Com a primeira letra da palavra são 
determinadas todas as páginas que contém as palavras 
iniciadas por aquela letra. 
• Os métodos de pesquisa digital são vantajosos quando as 
chaves são grandes e de tamanho variável. 
• Na pesquisa digital é possível localizar todas as 
ocorrências de determinada cadeia em um texto. 
46 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Pesquisa Digital 
• A diferença básica entre a busca digital e as buscas 
examinadas anteriormente é que a chave, na busca 
digital, não é tratada como um elemento único, indivisível. 
• Isto é, assume-se que cada chave é constituída de um 
conjunto de caracteres ou dígitos definidos em um 
alfabeto apropriado. 
• Em vez de se comparar a chave procurada com as 
chaves do conjunto armazenado, a comparação é 
efetuada, individualmente, entre os dígitos que compõem 
as chaves, dígito a dígito. 
47 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Pesquisa Digital 
• A raiz de uma árvore digital sempre existe e não corresponde a qualquer 
dígito do alfabeto. 
• Uma forma natural de decompor chaves constituídas de palavras é através 
das letras que as compõem. 
 
48 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Exemplo de Busca 
49 
x = seres 
x = sr 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Pesquisa Digital 
• É simples determinar a complexidade do processo de busca. 
O número de iterações efetuadas é igual ao tamanho k da 
chave, no máximo. 
• Em cada iteração, todas as operações podem ser efetuadas 
em tempo constante, exceto determinar o valor j 
correspondente à posição do dígito corrente na ordenação do 
alfabeto. Esse valor pode ser determinado, sem dificuldade, 
em tempo O(log m) por iteração, através de uma busca 
binária. 
• O algoritmo é então O(k(log m + 1)). Contudo, na maioria dos 
casos práticos o valor de m é pequeno. Nessa situação, a 
representação binária de cada dígito pode ser utilizada para 
determinar, diretamente, a sua posição na ordenação do 
alfabeto. Com essa premissa, a complexidade do algoritmo 
cai para O(k). 
50 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Pesquisa Digital 
• Uma vantagem desse método é que as chaves podem possuir 
tamanho arbitrário e variável. A complexidade da busca reflete 
apenas o tamanho da chave procurada. 
• Uma propriedade interessante dessa busca é que, ao localizar um 
certo prefixo x, terão sido localizadas todas as chaves do arquivo 
cujo prefixo é igual a x. Estas encontram-se na sub-árvore de raiz 
x. Tal propriedade pode ser útil em aplicações na área de 
linguística, onde os prefixos podem representar fonemas, palavras 
ou sentenças. 
• Intuitivamente, a técnica da árvore digital é tão mais eficiente 
quanto maior for a quantidade de chaves com prefixos comuns. 
Uma árvore digital que possua muitos zigue-zagues quase 
sempre é ineficiente. 
51 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
 
 
Árvore Trie 
52 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Árvore Trie 
• Definida em 1960 por Edward Fredkin; 
53 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Árvore Trie 
• Vêm de Retrieval 
• Cada nó contém informações sobre um ou mais símbolos 
do alfabeto utilizado 
• Principais Aplicações Abrangem: Corretores Ortográficos, 
Auto-Preenchimento de Textos e Armazenamento/Busca 
de Documentos XML 
• Cada nó no nível i representa o conjunto de todas as 
chaves que começam com a mesma sequência de i bits. 
 
 
 
54 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Árvore Trie 
Vantagens: 
• O formato das tries não depende da ordem em que as 
chaves são inseridas 
• Depende apenas dos valores das chaves 
• “Balanceamento natural” 
• Complexidade: O(AK) 
• A = tamanho do alfabeto 
• K = tamanho da chave 
• O pior caso é limitado pelo número de bits das chaves 
55 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Árvore Trie 
Desvantagens: 
• Caminhos de uma única direção acontecem quando 
chaves compartilham vários bits em comum 
• Por exemplo, as chaves B (00010) e C (00011) são 
idênticas exceto no último bit 
• Requer inspeção de todos os bits da chave independente 
do número de registros na trie 
• Os registros são armazenados apenas nas folhas, o que 
desperdiça memória em nós intermediários 
• Uma trie com N registros tem aproximadamente 1.44 N 
nós 
56 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
 
 
ÁRVORE PATRICIA 
57 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Árvore Patricia 
• A árvore Patricia é construída a partir da árvore binária de 
prefixo. Seja um conjunto de chaves {s1, …, sn} de valores 
binários tais que nenhuma chave seja prefixo de outra. 
• A árvore PATRICIA é uma representação compacta de 
uma Trie onde os nós que teriam apenas um filho são 
agrupados nos seus antecessores. É comum que as 
árvores Trie possuam um grupo disperso de chaves, 
desse modo, muitos nós possuem apenas um 
descendente. Isto faz com que as Trie tenham um custo 
grande de espaço. 
• A árvore Patriciaé estritamente binária, pois não possui 
zigue-zagues. 
58 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Árvore Patricia 
• Uma Trie usa cada uma das partes de uma chave, por 
vez, para determinar a sub-árvore. 
• Por outro lado, a árvore PATRICIA escolhe um elemento 
da chave (armazenando a sua posição) para determinar a 
sub-árvore. Isso remove a necessidade de nós com 
apenas um descendente. 
• Concebido por Donald Morrison, PATRICIA é um 
algoritmo para realização de buscas em árvores com as 
chaves dos nós representadas em binário, sem 
armazenar as chaves nos nós. 
59 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Árvore Patricia 
60 
• O nome é um acrônimo de “Practical Algorithm To 
Retrieve Information Coded In Alphanumeric”. 
• O método é particularmente útil para tratamento de 
chaves de tamanho variável extremamente longas, tais 
como títulos e frases. 
 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Busca 
61 
• A busca por uma string em uma arvore PATRICIA é 
similar a busca em uma Trie, com a diferença de que ao 
chegar em um nó, é comparado apenas um caractere, 
contra a comparação de substrings inteiras que acontece 
na Trie. 
• No pior caso, a complexidade de tempo é O(|s|), onde s é 
a string procurada. 
 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Inserção 
62 
• Inserir uma string em uma árvore Patricia é similar a pesquisar por 
essa string até o ponto onde a busca é encerrada, pois a string 
não é encontrada na árvore. 
• Se a busca é encerrada em uma aresta, um novo nó é criado 
nessa aresta. Esse nó armazena a posição do caractere que 
distingue a chave destino daquela aresta e a chave que se deseja 
inserir, e tem como filhos o nó que estava na extremidade 
seguinte da aresta e um novo nó com a parte restante da nova 
chave. 
• Se a busca for encerrada em um nó, então um nó filho é criado e 
o restante da nova chave é usado como rótulo para aresta entre 
os dois. 
• Ambos os casos tem complexidade de tempo de O(|s| + |E|), onde 
s é a string que será inserida e E é o alfabeto suportado pela 
árvore. 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
Remoção 
63 
• Remover uma string de uma árvore PATRICIA é o oposto da 
operação de inserção. 
• Primeiro, localiza-se a folha correspondente a string e remove-se 
ela da árvore. 
• Como o pai terá apenas um filho, os nós pai e irmão do nó 
removido são agrupados em um único nó. 
U
n
ive
rsid
ad
e
 Fe
d
e
ral d
o
 Esp
írito
 San
to
 - C
C
EN
S-U
FES 
Universidade Federal do Espírito Santo 
CCENS-UFES 
- Ordenação em memória primária 
‣Ordenação por troca direta (bolha); 
‣Ordenação por inserção direta; 
‣Ordenação por inserção binária; 
‣Ordenação por inserção com diminuição de incremento (shellsort); 
‣Ordenação por seleção direta; 
‣Heapsort; 
‣Quicksort; 
‣Mergesort; 
‣Ordenação por caixas; 
‣Ordenação por radicais; 
Próximo Conteúdo 
64 
C.H. Prevista 
26 horas

Continue navegando