Casamento de Padrões
Ricardo Terra
rterrabh [at] gmail.com
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 1 / 34
CV
Nome: Ricardo Terra
Email: rterrabh [at] gmail.com
www: ricardoterra.com.br
Twitter: rterrabh
Lattes: lattes.cnpq.br/ 0162081093970868
Ph.D. (UFMG/UWaterloo),
Post-Ph.D. (INRIA/Université Lille 1)
Background
Acadêmico : UFLA (desde 2014), UFSJ (1 ano ), FUMEC (3 anos ), UNIPAC (1 ano ), FAMINAS (3 anos )
Profissional : DBA Eng. (1 ano ), Synos (2 anos ), Stefanini (1 ano )
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 2 / 34
Introdução
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 3 / 34
Introdução
Em primeiro lugar, o que é “Casamento de Padrões”?
Em suma, consiste em encontrar ocorrências de um certo
padrão em uma sequência de elementos
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 4 / 34
Introdução
Em segundo lugar, por que estudar isto?
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 5 / 34
Introdução
Em segundo lugar, por que estudar isto?
Se isso não é importante, o Google também não é!
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 5 / 34
Introdução
Ainda não convencido?
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 6 / 34
Introdução
Ainda não convencido?
O que seria do Bing sem o Google?
(veja url)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 6 / 34
Introdução
Nada ainda?
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 7 / 34
Introdução
Nada ainda?
Processamento de texto, sequenciamento de DNA,
representação de imagens...
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 7 / 34
Introdução
Pronto!
Ideia: ok
Motivação: ok
Conhecimento: a partir de agora...
Nesta aula: Casamento de Cadeias (String Matching)
Casamento Exato
Definições
Alfabeto, string, padrão, formalização do problema...
Algoritmos
Categorias
Naive, AF, Shift-And e KMP
Casamento Aproximado (uma visão geral)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 8 / 34
Casamento Exato
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 9 / 34
Casamento Exato
Definições
Texto: arranjo T[1..n]
Padrão: arranjo P[1..m], m ≤ n
Seus elementos gerados a partir de um Alfabeto finito Σ
e.g., Σ = {0,1} ou Σ = {a,b,...,z}
T e P são chamados de strings
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 10 / 34
Casamento Exato
Definições
Texto: arranjo T[1..n]
Padrão: arranjo P[1..m], m ≤ n
Seus elementos gerados a partir de um Alfabeto finito Σ
e.g., Σ = {0,1} ou Σ = {a,b,...,z}
T e P são chamados de strings
Formalização do Problema
Dois strings
Texto T de comprimento |T| = n
Padrão P de comprimento |P| = m
m n
Objetivo: saber as ocorrências de P em T
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 10 / 34
Casamento Exato
Exemplo mega simples
Texto: aabaabc
Padrão: ab
Alfabeto: Σ = {a,b, c}
Nosso objetivo: 2 e 5
Aplicações mega simples
Comando / do Vi
i.e., função básica de Localizar em editores de texto
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 11 / 34
1 2 3 4 5 6 7
Casamento Exato
Categorias de Algoritmos
Padrão e texto não são pré-processados
O(m n) [espaço O(1)]
Algoritmo Naive
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 12 / 34
Casamento Exato
Categorias de Algoritmos
Padrão e texto não são pré-processados
O(m n) [espaço O(1)]
Algoritmo Naive
Padrão pré-processado
O(n) [espaço O(m |Σ|)]
Algoritmo AF, Shift-And e KMP
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 12 / 34
Casamento Exato
Categorias de Algoritmos
Padrão e texto não são pré-processados
O(m n) [espaço O(1)]
Algoritmo Naive
Padrão pré-processado
O(n) [espaço O(m |Σ|)]
Algoritmo AF, Shift-And e KMP
Padrão e texto são pré-processados
Uso de índices (e.g., arquivos invertidos, árvores trie e Patricia)
Bases semi-estáticas
O(lg n)1
[espaço O(n)]
1lg n = log2n
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 12 / 34
Casamento Exato
Categorias de Algoritmos
Padrão e texto não são pré-processados
O(m n) [espaço O(1)]
Algoritmo Naive
Padrão pré-processado
O(n) [espaço O(m |Σ|)]
Algoritmo AF, Shift-And e KMP
Padrão e texto são pré-processados
Uso de índices (e.g., arquivos invertidos, árvores trie e Patricia)
Bases semi-estáticas
O(lg n)1
[espaço O(n)]
1lg n = log2n
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 12 / 34
Algoritmo Naive
Algoritmo Naive (padrão e texto não são pré-processados)
Referenciado na literatura também como Força Bruta
Mais simples
Tentar casar o padrão com todas as subcadeias do texto
P[1..m] = T[s+1..s+m] para n-m+1 possíveis valores de s
Pior desempenho
O(nm)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 13 / 34
Algoritmo Naive
Pseudocódigo
Exemplo: ( T = acaabc, P = aab, n-m+1=4 )
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 14 / 34
Algoritmo Naive
Pseudocódigo
Exemplo: ( T = acaabc, P = aab, n-m+1=4 )
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 14 / 34
Algoritmo Naive
Pseudocódigo
Exemplo: ( T = acaabc, P = aab, n-m+1=4 )
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 14 / 34
Algoritmo Naive
Pseudocódigo
Exemplo: ( T = acaabc, P = aab, n-m+1=4 )
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 14 / 34
Algoritmo Naive
Pseudocódigo
Exemplo: ( T = acaabc, P = aab, n-m+1=4 )
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 14 / 34
Algoritmo Naive
Por que é ineficiente? (para não dizer ruim)
Não aprende!
Isto é, informação obtida do texto para um valor de s é
ignorada para os outros valores de s
e.g., se P = aaab e s=0 é válida
Implica s=1 ou 2 ou 3 não são válidos pois T[4]=b
Mas, ele testa mesmo assim!
Os próximos algoritmos tornam efetivo o uso desse tipo de
informação e, por isso, têm melhor desempenho
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 15 / 34
Algoritmos baseados em AF
Algoritmos baseados em Autômatos Finitos (padrão pré-processado)
Autômato é um modelo de computação (máquina) cujo
propósito principal é reconhecer linguagens
Um autômato finito M é uma quíntupla (Q,q0,A,Σ,δ) onde
Q é um conjunto finitos de estados
q0 ∈ Q é o estado inicial
A ⊆ Q é o conjunto de estados finais
Σ é um alfabeto de entrada finito
δ é uma função de transição Q x Σ → Q
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 16 / 34
Algoritmos baseados em AF
Exemplo de um AFD
Quíntupla (Q,q0,A,Σ,δ)
Q = {q1, q2, q3}
q0 = q1
A = {q2}
Σ = {0, 1}
δ(q1, 0) = q1, δ(q1, 1) = q2
δ(q2, 0) = q3, δ(q2, 1) = q2
δ(q3, 0) = q2, δ(q3, 1) = q2
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 17 / 34
Algoritmos baseados em AF
Exemplo de um AFD
Quíntupla (Q,q0,A,Σ,δ)
Q = {q1, q2, q3}
q0 = q1
A = {q2}
Σ = {0, 1}
δ(q1, 0) = q1, δ(q1, 1) = q2
δ(q2, 0) = q3, δ(q2, 1) = q2
δ(q3, 0) = q2, δ(q3, 1) = q2
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 17 / 34
AFD (um estado ativo)
AFND, AFND-λ (n estados ativos)
Algoritmos baseados em AF
Ideia (ou sacada)
1 Construir um AF para o padrão P [O(m |Σ|)]
2 O AF consome caractere a caractere do texto T [Θ(n)]
Se estado atual = estado final, então ocorrência do padrão
Pseudocódigo
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 18 / 34
Algoritmos baseados em AF
Exemplo: ( T = abababacaba, P = ababaca)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
Algoritmos baseados em AF
Exemplo: ( T = abababacaba, P = ababaca)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
Algoritmos baseados em AF
Exemplo: ( T = abababacaba, P = ababaca)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
Algoritmos baseados em AF
Exemplo: ( T = abababacaba, P = ababaca)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
Algoritmos baseados em AF
Exemplo: ( T = abababacaba, P = ababaca)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
Algoritmos baseados em AF
Exemplo: ( T = abababacaba, P = ababaca)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
Algoritmos baseados em AF
Exemplo: ( T = abababacaba, P = ababaca)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
Algoritmos baseados em AF
Exemplo: ( T = abababacaba, P = ababaca)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
Algoritmos baseados em AF
Exemplo: ( T = abababacaba, P = ababaca)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
Algoritmos baseados em AF
Exemplo: ( T = abababacaba, P = ababaca)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
Algoritmos baseados em AF
Exemplo: ( T = abababacaba, P = ababaca)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
Algoritmos baseados em AF
Exemplo: ( T = abababacaba, P = ababaca)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
Algoritmos baseados em AF
Exemplo: ( T = abababacaba, P = ababaca)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
Algoritmo Shift-And
Algoritmo Shift-And (padrão pré-processado)
Usa o conceito de paralelismo de bit
Bom desempenho devido às operações sobre bits [O(1)]
Ideia
1 Construção de uma tabela para armazenar máscara de
bits para cada caractere de P [O(m2
)]
e.g., se P=abba, então M[a]=1001
Pois, a aparece nas posições 1 e 4
2 Cada caractere lido (T) atualiza a máscara de bits R’ [Θ(n)]
Se o caractere casar com o padrão, um shift é realizado
Se a R’m = 1, uma ocorrência do padrão
Caso contrário, R’ = 0m
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 20 / 34
Algoritmo Shift-And
Exemplo: ( T = "os testes ", P = teste)
Texto (R >>1) | 10m−1
R’
o 1 0 0 0 0 0 0 0 0 0
s
t
e
s
t
e
s
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34
1 2 3 4 5
M[t] 1 0 0 1 0
M[e] 0 1 0 0 1
M[s] 0 0 1 0 0
Algoritmo Shift-And
Exemplo: ( T = "os testes ", P = teste)
Texto (R >>1) | 10m−1
R’
o 1 0 0 0 0 0 0 0 0 0
s 1 0 0 0 0 0 0 0 0 0
t
e
s
t
e
s
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34
1 2 3 4 5
M[t] 1 0 0 1 0
M[e] 0 1 0 0 1
M[s] 0 0 1 0 0
Algoritmo Shift-And
Exemplo: ( T = "os testes ", P = teste)
Texto (R >>1) | 10m−1
R’
o 1 0 0 0 0 0 0 0 0 0
s 1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
t
e
s
t
e
s
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34
1 2 3 4 5
M[t] 1 0 0 1 0
M[e] 0 1 0 0 1
M[s] 0 0 1 0 0
Algoritmo Shift-And
Exemplo: ( T = "os testes ", P = teste)
Texto (R >>1) | 10m−1
R’
o 1 0 0 0 0 0 0 0 0 0
s 1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
t 1 0 0 0 0 1 0 0 0 0
e
s
t
e
s
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34
1 2 3 4 5
M[t] 1 0 0 1 0
M[e] 0 1 0 0 1
M[s] 0 0 1 0 0
Algoritmo Shift-And
Exemplo: ( T = "os testes ", P = teste)
Texto (R >>1) | 10m−1
R’
o 1 0 0 0 0 0 0 0 0 0
s 1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
t 1 0 0 0 0 1 0 0 0 0
e 1 1 0 0 0 0 1 0 0 0
s
t
e
s
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34
1 2 3 4 5
M[t] 1 0 0 1 0
M[e] 0 1 0 0 1
M[s] 0 0 1 0 0
Algoritmo Shift-And
Exemplo: ( T = "os testes ", P = teste)
Texto (R >>1) | 10m−1
R’
o 1 0 0 0 0 0 0 0 0 0
s 1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
t 1 0 0 0 0 1 0 0 0 0
e 1 1 0 0 0 0 1 0 0 0
s 1 0 1 0 0 0 0 1 0 0
t
e
s
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34
1 2 3 4 5
M[t] 1 0 0 1 0
M[e] 0 1 0 0 1
M[s] 0 0 1 0 0
Algoritmo Shift-And
Exemplo: ( T = "os testes ", P = teste)
Texto (R >>1) | 10m−1
R’
o 1 0 0 0 0 0 0 0 0 0
s 1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
t 1 0 0 0 0 1 0 0 0 0
e 1 1 0 0 0 0 1 0 0 0
s 1 0 1 0 0 0 0 1 0 0
t 1 0 0 1 0 1 0 0 1 0
e
s
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34
1 2 3 4 5
M[t] 1 0 0 1 0
M[e] 0 1 0 0 1
M[s] 0 0 1 0 0
Algoritmo Shift-And
Exemplo: ( T = "os testes ", P = teste)
Texto (R >>1) | 10m−1
R’
o 1 0 0 0 0 0 0 0 0 0
s 1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
t 1 0 0 0 0 1 0 0 0 0
e 1 1 0 0 0 0 1 0 0 0
s 1 0 1 0 0 0 0 1 0 0
t 1 0 0 1 0 1 0 0 1 0
e 1 1 0 0 1 0 1 0 0 1
s
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34
1 2 3 4 5
M[t] 1 0 0 1 0
M[e] 0 1 0 0 1
M[s] 0 0 1 0 0
Algoritmo Shift-And
Exemplo: ( T = "os testes ", P = teste)
Texto (R >>1) | 10m−1
R’
o 1 0 0 0 0 0 0 0 0 0
s 1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
t 1 0 0 0 0 1 0 0 0 0
e 1 1 0 0 0 0 1 0 0 0
s 1 0 1 0 0 0 0 1 0 0
t 1 0 0 1 0 1 0 0 1 0
e 1 1 0 0 1 0 1 0 0 1
s 1 0 1 0 0 0 0 1 0 0
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34
1 2 3 4 5
M[t] 1 0 0 1 0
M[e] 0 1 0 0 1
M[s] 0 0 1 0 0
Algoritmo Shift-And
Exemplo: ( T = "os testes ", P = teste)
Texto (R >>1) | 10m−1
R’
o 1 0 0 0 0 0 0 0 0 0
s 1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
t 1 0 0 0 0 1 0 0 0 0
e 1 1 0 0 0 0 1 0 0 0
s 1 0 1 0 0 0 0 1 0 0
t 1 0 0 1 0 1 0 0 1 0
e 1 1 0 0 1 0 1 0 0 1
s 1 0 1 0 0 0 0 1 0 0
1 0 0 0 0 0 0 0 0 0
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34
1 2 3 4 5
M[t] 1 0 0 1 0
M[e] 0 1 0 0 1
M[s] 0 0 1 0 0
Algoritmo Knuth-Morris-Pratt
Algoritmo Knuth-Morris-Pratt (padrão pré-processado)
Algoritmo utiliza informação já obtida para avançar em s
Ao contrário do Naive que sempre faz s = s + 1 [O(n m)],
KMP calcula o s de forma a evitar testes desnecessários [Θ(n)]
E, ainda, evita a computação da função transição δ
Por meio de uma arranjo auxiliar π[1..m]
pré-computado em Θ(m)
Em algoritmos por AF, isso é pré-computado em O(m|Σ|)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 22 / 34
Algoritmo Knuth-Morris-Pratt
Exemplo: ( P = ababaca) Pseudocódigo
Compute-Prefix-Function(P)
i 1 2 3 4 5 6 7
P[i] a b a b a c a
π[i]
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
Algoritmo Knuth-Morris-Pratt
Exemplo: ( P = ababaca) Pseudocódigo
Compute-Prefix-Function(P)
i 1 2 3 4 5 6 7
P[i] a b a b a c a
π[i] 0
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
Algoritmo Knuth-Morris-Pratt
Exemplo: ( P = ababaca) Pseudocódigo
Compute-Prefix-Function(P)
i 1 2 3 4 5 6 7
P[i] a b a b a c a
π[i] 0 0
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
Algoritmo Knuth-Morris-Pratt
Exemplo: ( P = ababaca) Pseudocódigo
Compute-Prefix-Function(P)
i 1 2 3 4 5 6 7
P[i] a b a b a c a
π[i] 0 0 1
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
Algoritmo Knuth-Morris-Pratt
Exemplo: ( P = ababaca) Pseudocódigo
Compute-Prefix-Function(P)
i 1 2 3 4 5 6 7
P[i] a b a b a c a
π[i] 0 0 1 2
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
Algoritmo Knuth-Morris-Pratt
Exemplo: ( P = ababaca) Pseudocódigo
Compute-Prefix-Function(P)
i 1 2 3 4 5 6 7
P[i] a b a b a c a
π[i] 0 0 1 2 3
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
Algoritmo Knuth-Morris-Pratt
Exemplo: ( P = ababaca) Pseudocódigo
Compute-Prefix-Function(P)
i 1 2 3 4 5 6 7
P[i] a b a b a c a
π[i] 0 0 1 2 3 0
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
Algoritmo Knuth-Morris-Pratt
Exemplo: ( P = ababaca) Pseudocódigo
Compute-Prefix-Function(P)
i 1 2 3 4 5 6 7
P[i] a b a b a c a
π[i] 0 0 1 2 3 0 1
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
Algoritmo Knuth-Morris-Pratt
Exemplo: ( P = ababaca) Pseudocódigo
Compute-Prefix-Function(P)
i 1 2 3 4 5 6 7
P[i] a b a b a c a
π[i] 0 0 1 2 3 0 1
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
Algoritmo Knuth-Morris-Pratt
Exemplo: ( P = ababaca)
s’ = s + (q - π[q])
s’ = s + (5 - π[5])
s’ = s + (5 - 3)
s’ = s + 2
Pseudocódigo
Compute-Prefix-Function(P)
i 1 2 3 4 5 6 7
P[i] a b a b a c a
π[i] 0 0 1 2 3 0 1
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
Algoritmo Knuth-Morris-Pratt
Exemplo: ( P = ababaca)
s’ = s + (q - π[q])
s’ = s + (5 - π[5])
s’ = s + (5 - 3)
s’ = s + 2
Pseudocódigo
Compute-Prefix-Function(P)
i 1 2 3 4 5 6 7
P[i] a b a b a c a
π[i] 0 0 1 2 3 0 1
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
Algoritmos baseados em Janelas Deslizante
Algoritmos Boyer-Moore (BM), BMH e BMHS (padrão pré-processado)
Enfoque diferente
Usam uma janela de tamanho m que desliza ao longo do
texto T (ao invés de ler caractere-a-caractere)
Para cada posição desta janela, o algoritmo realiza
comparações no sentido da direita para a esquerda
Se não ocorrer desigualdade, uma ocorrência do padrão
Senão, o algoritmo calcula o deslocamento
BM propõe duas heurísticas: ocorrência e casamento
O que difere entre o BM, BMH e BMHS
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 24 / 34
Casamento Aproximado
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 25 / 34
Casamento Aproximado
Nem sempre procuramos de forma “exata”...
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 26 / 34
Casamento Aproximado
Nem sempre procuramos de forma “exata”...
Observe que o Google já corrigiu!
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 26 / 34
Casamento Aproximado
E, às vezes, o Google apenas recomenda...
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 27 / 34
Casamento Aproximado
E, às vezes, o Google apenas recomenda...
Por que será?
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 27 / 34
Casamento Aproximado
Definição
Existem variações com relação ao casamento exato
A mais importante é aquela que permite “alterações” no
que você procura (i.e., no padrão P)
Por exemplo, ao procurar este, talvez pesquisar também:
esse, essa, esta, isso, nessa...
Distância de edição
É o número de operações (inserção, substituição ou retirada de
caracteres) para transformar um string x em um string y
ed(“este”,“esse”)=1
ed(“este”,“isso”)=3
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 28 / 34
Casamento Aproximado
Definição
Existem variações com relação ao casamento exato
A mais importante é aquela que permite “alterações” no
que você procura (i.e., no padrão P)
Por exemplo, ao procurar este, talvez pesquisar também:
esse, essa, esta, isso, nessa...
Distância de edição
É o número de operações (inserção, substituição ou retirada de
caracteres) para transformar um string x em um string y
ed(“este”,“esse”)=1
ed(“este”,“isso”)=3
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 28 / 34
Google
Casamento Aproximado
Formalização do Problema
Dois strings
Texto T de comprimento |T| = n
Padrão P de comprimento |P| = m
m n
Objetivo: saber as ocorrências de P’ em T onde
ed(P,P’)=k
0 < k < m
k = 0 → casamento exato
k = m → aí já pode mudar tudo (sem sentido algum)
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 29 / 34
Casamento Aproximado
Algoritmos
Não são triviais
Basicamente modificações em algoritmos conhecidos
Shift-And
Algoritmos baseados em AF
Não serão abordados nessa disciplina
Provavelmente abordados em TPs
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 30 / 34
Considerações Finais
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 31 / 34
Considerações Finais
Para concluir, viu-se nesta aula:
Casamento de Cadeias
Problema, motivação, notação e terminologia
Casamento Exato (foco)
Naive, AF, Shift-And e KMP
Casamento Aproximado (uma visão geral)
Próxima Aula
Lista de exercícios sobre casamento exatos
Enunciado do TP
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 32 / 34
Referências
Thomas Cormen et al. Introduction To Algorithms. 3 ed., 2009.
Nívio Ziviani. Projeto de Algoritmos: com Implementações
em Pascal e C. 2 ed., 2004.
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 33 / 34
Obrigado!!!
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 34 / 34
Possíveis Questionamentos
Algoritmo BM – Heurística Ocorrência
Alinha a posição no texto que causou a colisão com o
primeiro caractere no padrão que casa com ele
Exemplo: ( T = aabcaccacbac, P = cacbac )
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 34 / 34
Possíveis Questionamentos
Algoritmo BM – Heurística Casamento
Ao mover o padrão para a direita, faça-o casar com o
pedaço do texto anteriormente casado
Exemplo: ( T = aabcaccacbac, P = cacbac )
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 34 / 34
Possíveis Questionamentos
Arquivo Invertido (padrão e texto são pré-processados)
Contém vocabulário e ocorrências
Lei de Heaps (V = Knβ = O(nβ))
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 34 / 34
Possíveis Questionamentos
Arquivo Invertido – Pesquisa em três passos
1 Pesquisa no vocabulário: palavras e padrões da consulta
são isoladas e pesquisadas no vocabulário
2 Recuperação das ocorrências: as listas de ocorrências das
palavras encontradas no vocabulário são recuperadas
3 Manipulação das ocorrências: as listas de ocorrências são
processadas para tratar frases, proximidade, ou operações
booleanas
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 34 / 34
Possíveis Questionamentos
Arquivo Invertido usando Trie – Exemplo
Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 34 / 34

Casamento de Padrões

  • 1.
    Casamento de Padrões RicardoTerra rterrabh [at] gmail.com Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 1 / 34
  • 2.
    CV Nome: Ricardo Terra Email:rterrabh [at] gmail.com www: ricardoterra.com.br Twitter: rterrabh Lattes: lattes.cnpq.br/ 0162081093970868 Ph.D. (UFMG/UWaterloo), Post-Ph.D. (INRIA/Université Lille 1) Background Acadêmico : UFLA (desde 2014), UFSJ (1 ano ), FUMEC (3 anos ), UNIPAC (1 ano ), FAMINAS (3 anos ) Profissional : DBA Eng. (1 ano ), Synos (2 anos ), Stefanini (1 ano ) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 2 / 34
  • 3.
    Introdução Ricardo Terra (rterrabh[at] gmail.com) Casamento de Padrões Fevereiro, 2013 3 / 34
  • 4.
    Introdução Em primeiro lugar,o que é “Casamento de Padrões”? Em suma, consiste em encontrar ocorrências de um certo padrão em uma sequência de elementos Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 4 / 34
  • 5.
    Introdução Em segundo lugar,por que estudar isto? Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 5 / 34
  • 6.
    Introdução Em segundo lugar,por que estudar isto? Se isso não é importante, o Google também não é! Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 5 / 34
  • 7.
    Introdução Ainda não convencido? RicardoTerra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 6 / 34
  • 8.
    Introdução Ainda não convencido? Oque seria do Bing sem o Google? (veja url) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 6 / 34
  • 9.
    Introdução Nada ainda? Ricardo Terra(rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 7 / 34
  • 10.
    Introdução Nada ainda? Processamento detexto, sequenciamento de DNA, representação de imagens... Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 7 / 34
  • 11.
    Introdução Pronto! Ideia: ok Motivação: ok Conhecimento:a partir de agora... Nesta aula: Casamento de Cadeias (String Matching) Casamento Exato Definições Alfabeto, string, padrão, formalização do problema... Algoritmos Categorias Naive, AF, Shift-And e KMP Casamento Aproximado (uma visão geral) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 8 / 34
  • 12.
    Casamento Exato Ricardo Terra(rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 9 / 34
  • 13.
    Casamento Exato Definições Texto: arranjoT[1..n] Padrão: arranjo P[1..m], m ≤ n Seus elementos gerados a partir de um Alfabeto finito Σ e.g., Σ = {0,1} ou Σ = {a,b,...,z} T e P são chamados de strings Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 10 / 34
  • 14.
    Casamento Exato Definições Texto: arranjoT[1..n] Padrão: arranjo P[1..m], m ≤ n Seus elementos gerados a partir de um Alfabeto finito Σ e.g., Σ = {0,1} ou Σ = {a,b,...,z} T e P são chamados de strings Formalização do Problema Dois strings Texto T de comprimento |T| = n Padrão P de comprimento |P| = m m n Objetivo: saber as ocorrências de P em T Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 10 / 34
  • 15.
    Casamento Exato Exemplo megasimples Texto: aabaabc Padrão: ab Alfabeto: Σ = {a,b, c} Nosso objetivo: 2 e 5 Aplicações mega simples Comando / do Vi i.e., função básica de Localizar em editores de texto Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 11 / 34 1 2 3 4 5 6 7
  • 16.
    Casamento Exato Categorias deAlgoritmos Padrão e texto não são pré-processados O(m n) [espaço O(1)] Algoritmo Naive Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 12 / 34
  • 17.
    Casamento Exato Categorias deAlgoritmos Padrão e texto não são pré-processados O(m n) [espaço O(1)] Algoritmo Naive Padrão pré-processado O(n) [espaço O(m |Σ|)] Algoritmo AF, Shift-And e KMP Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 12 / 34
  • 18.
    Casamento Exato Categorias deAlgoritmos Padrão e texto não são pré-processados O(m n) [espaço O(1)] Algoritmo Naive Padrão pré-processado O(n) [espaço O(m |Σ|)] Algoritmo AF, Shift-And e KMP Padrão e texto são pré-processados Uso de índices (e.g., arquivos invertidos, árvores trie e Patricia) Bases semi-estáticas O(lg n)1 [espaço O(n)] 1lg n = log2n Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 12 / 34
  • 19.
    Casamento Exato Categorias deAlgoritmos Padrão e texto não são pré-processados O(m n) [espaço O(1)] Algoritmo Naive Padrão pré-processado O(n) [espaço O(m |Σ|)] Algoritmo AF, Shift-And e KMP Padrão e texto são pré-processados Uso de índices (e.g., arquivos invertidos, árvores trie e Patricia) Bases semi-estáticas O(lg n)1 [espaço O(n)] 1lg n = log2n Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 12 / 34
  • 20.
    Algoritmo Naive Algoritmo Naive(padrão e texto não são pré-processados) Referenciado na literatura também como Força Bruta Mais simples Tentar casar o padrão com todas as subcadeias do texto P[1..m] = T[s+1..s+m] para n-m+1 possíveis valores de s Pior desempenho O(nm) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 13 / 34
  • 21.
    Algoritmo Naive Pseudocódigo Exemplo: (T = acaabc, P = aab, n-m+1=4 ) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 14 / 34
  • 22.
    Algoritmo Naive Pseudocódigo Exemplo: (T = acaabc, P = aab, n-m+1=4 ) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 14 / 34
  • 23.
    Algoritmo Naive Pseudocódigo Exemplo: (T = acaabc, P = aab, n-m+1=4 ) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 14 / 34
  • 24.
    Algoritmo Naive Pseudocódigo Exemplo: (T = acaabc, P = aab, n-m+1=4 ) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 14 / 34
  • 25.
    Algoritmo Naive Pseudocódigo Exemplo: (T = acaabc, P = aab, n-m+1=4 ) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 14 / 34
  • 26.
    Algoritmo Naive Por queé ineficiente? (para não dizer ruim) Não aprende! Isto é, informação obtida do texto para um valor de s é ignorada para os outros valores de s e.g., se P = aaab e s=0 é válida Implica s=1 ou 2 ou 3 não são válidos pois T[4]=b Mas, ele testa mesmo assim! Os próximos algoritmos tornam efetivo o uso desse tipo de informação e, por isso, têm melhor desempenho Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 15 / 34
  • 27.
    Algoritmos baseados emAF Algoritmos baseados em Autômatos Finitos (padrão pré-processado) Autômato é um modelo de computação (máquina) cujo propósito principal é reconhecer linguagens Um autômato finito M é uma quíntupla (Q,q0,A,Σ,δ) onde Q é um conjunto finitos de estados q0 ∈ Q é o estado inicial A ⊆ Q é o conjunto de estados finais Σ é um alfabeto de entrada finito δ é uma função de transição Q x Σ → Q Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 16 / 34
  • 28.
    Algoritmos baseados emAF Exemplo de um AFD Quíntupla (Q,q0,A,Σ,δ) Q = {q1, q2, q3} q0 = q1 A = {q2} Σ = {0, 1} δ(q1, 0) = q1, δ(q1, 1) = q2 δ(q2, 0) = q3, δ(q2, 1) = q2 δ(q3, 0) = q2, δ(q3, 1) = q2 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 17 / 34
  • 29.
    Algoritmos baseados emAF Exemplo de um AFD Quíntupla (Q,q0,A,Σ,δ) Q = {q1, q2, q3} q0 = q1 A = {q2} Σ = {0, 1} δ(q1, 0) = q1, δ(q1, 1) = q2 δ(q2, 0) = q3, δ(q2, 1) = q2 δ(q3, 0) = q2, δ(q3, 1) = q2 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 17 / 34 AFD (um estado ativo) AFND, AFND-λ (n estados ativos)
  • 30.
    Algoritmos baseados emAF Ideia (ou sacada) 1 Construir um AF para o padrão P [O(m |Σ|)] 2 O AF consome caractere a caractere do texto T [Θ(n)] Se estado atual = estado final, então ocorrência do padrão Pseudocódigo Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 18 / 34
  • 31.
    Algoritmos baseados emAF Exemplo: ( T = abababacaba, P = ababaca) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
  • 32.
    Algoritmos baseados emAF Exemplo: ( T = abababacaba, P = ababaca) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
  • 33.
    Algoritmos baseados emAF Exemplo: ( T = abababacaba, P = ababaca) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
  • 34.
    Algoritmos baseados emAF Exemplo: ( T = abababacaba, P = ababaca) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
  • 35.
    Algoritmos baseados emAF Exemplo: ( T = abababacaba, P = ababaca) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
  • 36.
    Algoritmos baseados emAF Exemplo: ( T = abababacaba, P = ababaca) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
  • 37.
    Algoritmos baseados emAF Exemplo: ( T = abababacaba, P = ababaca) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
  • 38.
    Algoritmos baseados emAF Exemplo: ( T = abababacaba, P = ababaca) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
  • 39.
    Algoritmos baseados emAF Exemplo: ( T = abababacaba, P = ababaca) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
  • 40.
    Algoritmos baseados emAF Exemplo: ( T = abababacaba, P = ababaca) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
  • 41.
    Algoritmos baseados emAF Exemplo: ( T = abababacaba, P = ababaca) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
  • 42.
    Algoritmos baseados emAF Exemplo: ( T = abababacaba, P = ababaca) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
  • 43.
    Algoritmos baseados emAF Exemplo: ( T = abababacaba, P = ababaca) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 19 / 34
  • 44.
    Algoritmo Shift-And Algoritmo Shift-And(padrão pré-processado) Usa o conceito de paralelismo de bit Bom desempenho devido às operações sobre bits [O(1)] Ideia 1 Construção de uma tabela para armazenar máscara de bits para cada caractere de P [O(m2 )] e.g., se P=abba, então M[a]=1001 Pois, a aparece nas posições 1 e 4 2 Cada caractere lido (T) atualiza a máscara de bits R’ [Θ(n)] Se o caractere casar com o padrão, um shift é realizado Se a R’m = 1, uma ocorrência do padrão Caso contrário, R’ = 0m Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 20 / 34
  • 45.
    Algoritmo Shift-And Exemplo: (T = "os testes ", P = teste) Texto (R >>1) | 10m−1 R’ o 1 0 0 0 0 0 0 0 0 0 s t e s t e s Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34 1 2 3 4 5 M[t] 1 0 0 1 0 M[e] 0 1 0 0 1 M[s] 0 0 1 0 0
  • 46.
    Algoritmo Shift-And Exemplo: (T = "os testes ", P = teste) Texto (R >>1) | 10m−1 R’ o 1 0 0 0 0 0 0 0 0 0 s 1 0 0 0 0 0 0 0 0 0 t e s t e s Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34 1 2 3 4 5 M[t] 1 0 0 1 0 M[e] 0 1 0 0 1 M[s] 0 0 1 0 0
  • 47.
    Algoritmo Shift-And Exemplo: (T = "os testes ", P = teste) Texto (R >>1) | 10m−1 R’ o 1 0 0 0 0 0 0 0 0 0 s 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 t e s t e s Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34 1 2 3 4 5 M[t] 1 0 0 1 0 M[e] 0 1 0 0 1 M[s] 0 0 1 0 0
  • 48.
    Algoritmo Shift-And Exemplo: (T = "os testes ", P = teste) Texto (R >>1) | 10m−1 R’ o 1 0 0 0 0 0 0 0 0 0 s 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 t 1 0 0 0 0 1 0 0 0 0 e s t e s Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34 1 2 3 4 5 M[t] 1 0 0 1 0 M[e] 0 1 0 0 1 M[s] 0 0 1 0 0
  • 49.
    Algoritmo Shift-And Exemplo: (T = "os testes ", P = teste) Texto (R >>1) | 10m−1 R’ o 1 0 0 0 0 0 0 0 0 0 s 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 t 1 0 0 0 0 1 0 0 0 0 e 1 1 0 0 0 0 1 0 0 0 s t e s Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34 1 2 3 4 5 M[t] 1 0 0 1 0 M[e] 0 1 0 0 1 M[s] 0 0 1 0 0
  • 50.
    Algoritmo Shift-And Exemplo: (T = "os testes ", P = teste) Texto (R >>1) | 10m−1 R’ o 1 0 0 0 0 0 0 0 0 0 s 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 t 1 0 0 0 0 1 0 0 0 0 e 1 1 0 0 0 0 1 0 0 0 s 1 0 1 0 0 0 0 1 0 0 t e s Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34 1 2 3 4 5 M[t] 1 0 0 1 0 M[e] 0 1 0 0 1 M[s] 0 0 1 0 0
  • 51.
    Algoritmo Shift-And Exemplo: (T = "os testes ", P = teste) Texto (R >>1) | 10m−1 R’ o 1 0 0 0 0 0 0 0 0 0 s 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 t 1 0 0 0 0 1 0 0 0 0 e 1 1 0 0 0 0 1 0 0 0 s 1 0 1 0 0 0 0 1 0 0 t 1 0 0 1 0 1 0 0 1 0 e s Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34 1 2 3 4 5 M[t] 1 0 0 1 0 M[e] 0 1 0 0 1 M[s] 0 0 1 0 0
  • 52.
    Algoritmo Shift-And Exemplo: (T = "os testes ", P = teste) Texto (R >>1) | 10m−1 R’ o 1 0 0 0 0 0 0 0 0 0 s 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 t 1 0 0 0 0 1 0 0 0 0 e 1 1 0 0 0 0 1 0 0 0 s 1 0 1 0 0 0 0 1 0 0 t 1 0 0 1 0 1 0 0 1 0 e 1 1 0 0 1 0 1 0 0 1 s Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34 1 2 3 4 5 M[t] 1 0 0 1 0 M[e] 0 1 0 0 1 M[s] 0 0 1 0 0
  • 53.
    Algoritmo Shift-And Exemplo: (T = "os testes ", P = teste) Texto (R >>1) | 10m−1 R’ o 1 0 0 0 0 0 0 0 0 0 s 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 t 1 0 0 0 0 1 0 0 0 0 e 1 1 0 0 0 0 1 0 0 0 s 1 0 1 0 0 0 0 1 0 0 t 1 0 0 1 0 1 0 0 1 0 e 1 1 0 0 1 0 1 0 0 1 s 1 0 1 0 0 0 0 1 0 0 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34 1 2 3 4 5 M[t] 1 0 0 1 0 M[e] 0 1 0 0 1 M[s] 0 0 1 0 0
  • 54.
    Algoritmo Shift-And Exemplo: (T = "os testes ", P = teste) Texto (R >>1) | 10m−1 R’ o 1 0 0 0 0 0 0 0 0 0 s 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 t 1 0 0 0 0 1 0 0 0 0 e 1 1 0 0 0 0 1 0 0 0 s 1 0 1 0 0 0 0 1 0 0 t 1 0 0 1 0 1 0 0 1 0 e 1 1 0 0 1 0 1 0 0 1 s 1 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 21 / 34 1 2 3 4 5 M[t] 1 0 0 1 0 M[e] 0 1 0 0 1 M[s] 0 0 1 0 0
  • 55.
    Algoritmo Knuth-Morris-Pratt Algoritmo Knuth-Morris-Pratt(padrão pré-processado) Algoritmo utiliza informação já obtida para avançar em s Ao contrário do Naive que sempre faz s = s + 1 [O(n m)], KMP calcula o s de forma a evitar testes desnecessários [Θ(n)] E, ainda, evita a computação da função transição δ Por meio de uma arranjo auxiliar π[1..m] pré-computado em Θ(m) Em algoritmos por AF, isso é pré-computado em O(m|Σ|) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 22 / 34
  • 56.
    Algoritmo Knuth-Morris-Pratt Exemplo: (P = ababaca) Pseudocódigo Compute-Prefix-Function(P) i 1 2 3 4 5 6 7 P[i] a b a b a c a π[i] Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
  • 57.
    Algoritmo Knuth-Morris-Pratt Exemplo: (P = ababaca) Pseudocódigo Compute-Prefix-Function(P) i 1 2 3 4 5 6 7 P[i] a b a b a c a π[i] 0 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
  • 58.
    Algoritmo Knuth-Morris-Pratt Exemplo: (P = ababaca) Pseudocódigo Compute-Prefix-Function(P) i 1 2 3 4 5 6 7 P[i] a b a b a c a π[i] 0 0 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
  • 59.
    Algoritmo Knuth-Morris-Pratt Exemplo: (P = ababaca) Pseudocódigo Compute-Prefix-Function(P) i 1 2 3 4 5 6 7 P[i] a b a b a c a π[i] 0 0 1 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
  • 60.
    Algoritmo Knuth-Morris-Pratt Exemplo: (P = ababaca) Pseudocódigo Compute-Prefix-Function(P) i 1 2 3 4 5 6 7 P[i] a b a b a c a π[i] 0 0 1 2 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
  • 61.
    Algoritmo Knuth-Morris-Pratt Exemplo: (P = ababaca) Pseudocódigo Compute-Prefix-Function(P) i 1 2 3 4 5 6 7 P[i] a b a b a c a π[i] 0 0 1 2 3 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
  • 62.
    Algoritmo Knuth-Morris-Pratt Exemplo: (P = ababaca) Pseudocódigo Compute-Prefix-Function(P) i 1 2 3 4 5 6 7 P[i] a b a b a c a π[i] 0 0 1 2 3 0 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
  • 63.
    Algoritmo Knuth-Morris-Pratt Exemplo: (P = ababaca) Pseudocódigo Compute-Prefix-Function(P) i 1 2 3 4 5 6 7 P[i] a b a b a c a π[i] 0 0 1 2 3 0 1 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
  • 64.
    Algoritmo Knuth-Morris-Pratt Exemplo: (P = ababaca) Pseudocódigo Compute-Prefix-Function(P) i 1 2 3 4 5 6 7 P[i] a b a b a c a π[i] 0 0 1 2 3 0 1 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
  • 65.
    Algoritmo Knuth-Morris-Pratt Exemplo: (P = ababaca) s’ = s + (q - π[q]) s’ = s + (5 - π[5]) s’ = s + (5 - 3) s’ = s + 2 Pseudocódigo Compute-Prefix-Function(P) i 1 2 3 4 5 6 7 P[i] a b a b a c a π[i] 0 0 1 2 3 0 1 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
  • 66.
    Algoritmo Knuth-Morris-Pratt Exemplo: (P = ababaca) s’ = s + (q - π[q]) s’ = s + (5 - π[5]) s’ = s + (5 - 3) s’ = s + 2 Pseudocódigo Compute-Prefix-Function(P) i 1 2 3 4 5 6 7 P[i] a b a b a c a π[i] 0 0 1 2 3 0 1 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 23 / 34
  • 67.
    Algoritmos baseados emJanelas Deslizante Algoritmos Boyer-Moore (BM), BMH e BMHS (padrão pré-processado) Enfoque diferente Usam uma janela de tamanho m que desliza ao longo do texto T (ao invés de ler caractere-a-caractere) Para cada posição desta janela, o algoritmo realiza comparações no sentido da direita para a esquerda Se não ocorrer desigualdade, uma ocorrência do padrão Senão, o algoritmo calcula o deslocamento BM propõe duas heurísticas: ocorrência e casamento O que difere entre o BM, BMH e BMHS Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 24 / 34
  • 68.
    Casamento Aproximado Ricardo Terra(rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 25 / 34
  • 69.
    Casamento Aproximado Nem sempreprocuramos de forma “exata”... Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 26 / 34
  • 70.
    Casamento Aproximado Nem sempreprocuramos de forma “exata”... Observe que o Google já corrigiu! Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 26 / 34
  • 71.
    Casamento Aproximado E, àsvezes, o Google apenas recomenda... Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 27 / 34
  • 72.
    Casamento Aproximado E, àsvezes, o Google apenas recomenda... Por que será? Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 27 / 34
  • 73.
    Casamento Aproximado Definição Existem variaçõescom relação ao casamento exato A mais importante é aquela que permite “alterações” no que você procura (i.e., no padrão P) Por exemplo, ao procurar este, talvez pesquisar também: esse, essa, esta, isso, nessa... Distância de edição É o número de operações (inserção, substituição ou retirada de caracteres) para transformar um string x em um string y ed(“este”,“esse”)=1 ed(“este”,“isso”)=3 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 28 / 34
  • 74.
    Casamento Aproximado Definição Existem variaçõescom relação ao casamento exato A mais importante é aquela que permite “alterações” no que você procura (i.e., no padrão P) Por exemplo, ao procurar este, talvez pesquisar também: esse, essa, esta, isso, nessa... Distância de edição É o número de operações (inserção, substituição ou retirada de caracteres) para transformar um string x em um string y ed(“este”,“esse”)=1 ed(“este”,“isso”)=3 Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 28 / 34 Google
  • 75.
    Casamento Aproximado Formalização doProblema Dois strings Texto T de comprimento |T| = n Padrão P de comprimento |P| = m m n Objetivo: saber as ocorrências de P’ em T onde ed(P,P’)=k 0 < k < m k = 0 → casamento exato k = m → aí já pode mudar tudo (sem sentido algum) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 29 / 34
  • 76.
    Casamento Aproximado Algoritmos Não sãotriviais Basicamente modificações em algoritmos conhecidos Shift-And Algoritmos baseados em AF Não serão abordados nessa disciplina Provavelmente abordados em TPs Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 30 / 34
  • 77.
    Considerações Finais Ricardo Terra(rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 31 / 34
  • 78.
    Considerações Finais Para concluir,viu-se nesta aula: Casamento de Cadeias Problema, motivação, notação e terminologia Casamento Exato (foco) Naive, AF, Shift-And e KMP Casamento Aproximado (uma visão geral) Próxima Aula Lista de exercícios sobre casamento exatos Enunciado do TP Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 32 / 34
  • 79.
    Referências Thomas Cormen etal. Introduction To Algorithms. 3 ed., 2009. Nívio Ziviani. Projeto de Algoritmos: com Implementações em Pascal e C. 2 ed., 2004. Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 33 / 34
  • 80.
    Obrigado!!! Ricardo Terra (rterrabh[at] gmail.com) Casamento de Padrões Fevereiro, 2013 34 / 34
  • 81.
    Possíveis Questionamentos Algoritmo BM– Heurística Ocorrência Alinha a posição no texto que causou a colisão com o primeiro caractere no padrão que casa com ele Exemplo: ( T = aabcaccacbac, P = cacbac ) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 34 / 34
  • 82.
    Possíveis Questionamentos Algoritmo BM– Heurística Casamento Ao mover o padrão para a direita, faça-o casar com o pedaço do texto anteriormente casado Exemplo: ( T = aabcaccacbac, P = cacbac ) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 34 / 34
  • 83.
    Possíveis Questionamentos Arquivo Invertido(padrão e texto são pré-processados) Contém vocabulário e ocorrências Lei de Heaps (V = Knβ = O(nβ)) Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 34 / 34
  • 84.
    Possíveis Questionamentos Arquivo Invertido– Pesquisa em três passos 1 Pesquisa no vocabulário: palavras e padrões da consulta são isoladas e pesquisadas no vocabulário 2 Recuperação das ocorrências: as listas de ocorrências das palavras encontradas no vocabulário são recuperadas 3 Manipulação das ocorrências: as listas de ocorrências são processadas para tratar frases, proximidade, ou operações booleanas Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 34 / 34
  • 85.
    Possíveis Questionamentos Arquivo Invertidousando Trie – Exemplo Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 34 / 34