950 likes | 1.1k Views
String Matching Emparelhamento de Cadeias. Cin – UFPE Danielle Nathália Gomes da Silva Anderson Paulo da Silva { dngs , aps3} @ cin.ufpe.br Recife, Junho de 2008. Guia. Motivação Definição Notação e Terminologia Algoritmos Força Bruta Simples Rabin-Karp
E N D
String Matching Emparelhamento de Cadeias Cin – UFPE Danielle Nathália Gomes da Silva Anderson Paulo da Silva {dngs, aps3} @cin.ufpe.br Recife, Junho de 2008
Guia • Motivação • Definição • Notação e Terminologia • Algoritmos • Força Bruta Simples • Rabin-Karp • Emparelhamento por Autômato Finito • Knuth-Moris Pratt.
Motivação Encontra sequências: • Grupo de pixels (leitura de um pergaminho); • Grupo de índices de um banco de dados; • Um texto (no caso de um “search” de um editor de texto); • Uma sequência de DNA;
Motivação Objetivo: Encontrar uma cadeia de caracteres e geralmente, todas as ocorrências dessa cadeia (conhecida como padrão) em um determinado texto.
Visão Geral • Força Bruta Simples: Desliza através do texto verificando caractere a caractere. • Rabin-Karp: Codifica o padrão buscado como uma tabela hash. • Emparelhamento por Autômato Finito: Para cada padrão é criado um autômato finito determinístico que o identifica no texto. • Knuth-Moris Pratt (KMP): Custo linear, Otimização do simples e do AF. Mais usado para encontrar sequencia de DNA. ...Força Bruta AF - 1970 KMP/BM - 1977 KR - 1980
Quadro Comparativo • Com exceção do algoritmo de Força Bruta, todos os outros que serão apresentados, têm uma etapa anterior ao emparelhamento, que é fase de pré-processamento do padrão. • Sendo o tempo total do algoritmo o tempo de processamento mais o tempo de emparelhamento.
Definições Texto é um array de tamanho n T [ 1 ... n] Padrão é um array de tamanho m P [ 1 ... m] T n = 8 P s=2 m= 3 s deslocamento Com m ≤ n a b c a a b b c c a a
Definições Quando o padrão P ocorre? Quando temos um deslocamento valido? • Se 0 ≤ s ≤ n - m • T [s+1 ... s+m] = P [1 ... m] • T [s+j] = P [j], para 1 ≤ j ≤ m
Definição • Se 0 ≤ s ≤ n - m (Possíveis valores de s) s=0 s=1 s=2 s=3 s=4 s=5 a b c a a b b c c c c c c c c c c c c c c c c c c c
Definição • T [s+1 ... s+m] = P [1 ... m] T n = 8 Ps=2 m = 3 T [2+1 ... 2+3] = P [1 ... 3] T [3, 4, 5] = P [1, 2, 3] a b c a a b b c c c c
Definição • T [s+j] = P [j], para 1 ≤ j ≤ m T n = 8 P s=2 m = 3 Se j = 3 1 ≤ j ≤ 3, T [2+3] = P [3] a b c a a b b c Verifica para todos os valores de j c c c
Notação e Terminologia ∑ Sigma, representa um alfabeto ∑* Sigma asterisco, conjunto de todas as cadeias de comprimento finito formadas, usando caracteres do alfabeto ∑ ε Cadeia vazia e pertence a ∑* lXl Comprimento de X XY Concatenação de duas cadeias X e Y. E tem comprimento lXl + lYl
Notação e Terminologia • Prefixo: w é prefixo de x, denota-se por w x, se x=wy para y ∑*. Então se w x, |w| ≤ |x|. Ex.: ab abcca • Sufixo: w é sufixo de x, denota-se por wx, se x=yw para y ∑*. Então se w x, |w| ≤ |x|. Ex.: cca abcca
Notação e Terminologia Se |x| ≤ |y|, então, x y. X Z Y X Y Prova gráfica do Lema 32.1 Suponha que x,y e z sejam cadeias tais que x z e y z.
Notação e Terminologia Se |x| |y|, então, y x. X Z Y X Y
Notação e Terminologia Se |x| |y|, então, y x. X Z Y X Y
Notação e Terminologia Trazendo para nosso contexto: • Denotaremos o prefixo de k caracteres P[1...k] do padrão P[1...m] por Pk. • Então, P0= ε e Pm=P=P[1...m]. • Também denota-se para k caracteres do texto T como Tk. Objetivo: Encontrar “s” válidos tal que P T s+m.
Notação e Terminologia T 1 ...n Tk 1 ...k P 1 ...m Pk 1 ...k Ilustrando: T n = 6 P s=0 m = 3, P Ts+m -> P T3 s=1 P T4 s=2 P T5 s=3 P T6 a a b a c a a b a c b a a c a c b a a a c b a a a a b a c b a a c a c b a a a a c b a a a a a a a a a a a a a a
O Algoritmo de Força Bruta Simples O algoritmo de força bruta procura por todos os deslocamentos s válidos, usando um loop para verificar a condição de que: P[1 .. m] = T[s + 1 .. s + m] para cada n – m + 1 possível valor de s.
O Algoritmo de Força Bruta Simples NAIVE-STRING-MATCHER (T, P) • n ← comprimento[T] • m ← comprimento[P] • for s ← 0 to n-m • do if P[1...m]=T[s+1...s+m] • then imprimir “Padrão ocorre com deslocamento” s Caminha os possíveis valores de s Verifica a condição de igualdade
O Algoritmo de Força Bruta Simples O tempo de complexidade deste algoritmo no pior caso é O((n – m + 1)m). Serão feitas comparações para cada deslocamento s, de acordo com o tamanho do padrão m. Considere: T n=7 P m=5 S assume n-m+1 = 3. =(7-5+1)5 =15 b c a a b b c b c a a b b c a a b b c a a b b c a a b b c a a b b c Se m = n/2, Então O (n/2 x n) O (n2/2) 1/2 O(n2) O(n2)
O Algoritmo de Força Bruta SimplesExercício 32.1-1 (Cormen) T P s=0 s=1 P[1,2,3,4]=T[2,3,4,5] s=2 s=3 s=4 s=5 P[1,2,3,4]=T[6,7,8,9] ... s=11 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1
O Algoritmo de Força Bruta Simples Exemplo de busca em texto
Rabin-Karp • Princípio: Transforma o padrão procurado em um número, seguindo determinadas regras. • O métodos é baseado em processar a função de assinatura de cada substring de m-caracteres no texto e checar se é igual a assinatura da função da palavra procurada. • O padrão P ocorre no texto T se o valor calculado para P for igual ao valor calculado para qualquer substring X de T, de tamanho m, tal que | X | = | P |
Rabin-Karp • Cada caractere será um dígito decimal • 31415 corresponde ao nº decimal 31.415 ... ... ... Os padrões podem ser texto 9 9 2 1 2 3 5 9 0 2 3 1 4 1 5 2 6 7 3 11 8 9 3 11 0 1 7 8 4 5 10 11 7 9 Por isso precisamos verifica a condição de igualdade
Rabin-Karp • Acrescentando notação: p – número correspondente de P; ts – número correspondente de T; d – cardinalidade do alfabeto ; Então cada caractere é um dígito na base d. q – número primo, como: 16647133; • Então temos s válidos se, p = ts. • Como calcular p e ts ?
Rabin-Karp Com o alfabeto = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} e || = 10 P Temos: (P[1] * 10 + P[2]) = 19 (19 * 10) + P[3] = 199 (199 * 10) + P[4] = 1991 Generalizando: P[m] + || (P[m-1]+ || (P[m-2] + ... + || (P[2] + | P[1]) )) 1 9 9 1 ∑ = alfabeto |∑| = tamanho de ∑ Dado um caractere, a representação numérica deste será sua posição no alfabeto ∑
Rabin-Karp • Realiza pré-processamento do padrão P em tempo (m) |P| = m Usando a regra de Horner, podemos calcular o valor de p no tempo O (m) P = P[m]+10(P[m-1]+10(P[m-2] + ... + 10(P[2]+10P[1])...)) Comparar P com as m 1ª posições de T. O t0 pode ser calculado de modo semelhante, mas os t1 ... tn-m ? 9 9 2 1 2 3 5 9 0 2 3 1 4 1 5 2 6 7 3 2 3 5 9
Rabin-Karp Para calcular os ts, com s = 1 ... n-m. Temos s=6. ts+1 = 10(ts– 10m-1T[s+1]) + T[s+m+1] ts+1 = 10(31415– 30000) + 2 ts+1 = 10(1415) + 2 ts+1 = 14152 ... ... ... Remove o dígito de mais alta ordem de ts. 9 9 2 1 2 3 5 9 0 2 3 1 4 1 5 2 6 7 3 11 8 9 3 11 0 1 7 8 4 5 10 11 7 9
Rabin-Karp 10m-1T[s+1] – Remover dígito de mais alta ordem. 1991 – 10m-1 1991 – 1000 991 991 x 10 9910 + 0 = 9910 9 9 2 1 1 9 9 1 0 2 0 1 4 1 5 2 6 7 3 1 9 9 0 É previamente calculado. Nesta operação matemática a complexidade depende do nº de bits. Custo O(lg m). O dígito de mais alta ordem foi retirado. Faz esse processo O(n – m) Acrescenta a casa decimal para a substring voltar a ter tamanho m O(1)
Rabin-Karp Os valores das transformações de P e das substrings de T são muito grande, quando m e |∑| são muito longos Ajustando a equação para funcionar em módulo q. 14152 (d(ts – h T[s+1]) + T[s+m+1]) mod q 14152 10(31415– 3x10000) + 2 (mod 13) 14152 10(7-3x3) + 2 (mod 13) 14152 8 (mod 13) Onde, d = || h dm-1 3 1 4 1 5 2 7 8
Rabin-Karp • Realiza pré-processamento em tempo (lg m) + (m) + (m) = (m) • Emparelhamento (matching) n-m+1 deslocamento possíveis T deve ser calculado com deslocamento s+1. Processar T no deslocamento s+1 custa O(1), então transformar todo T leva tempo (n-m+1) Quantas comparações possíveis entre o número calculado p e para t vamos realizar? (n-m+1) Até agora temos (2(n-m+1)) = (n-m+1) Processar o texto e fazer comparações entre dos nº entre as chaves
Rabin-Karp • Análise do pior caso. • Entretanto para (n-m+1) deslocamento possíveis, no pior caso, pode haver necessidade de comparar caractere a caractere de p com todos os ts. Para comparar o com ts, custa o tamanho do padrão, O(m), então temos que, o custo de emparelhamento no pior caso é: (n-m+1) x (m) = ((n-m+1)m) • O custo total do algoritmo é a soma do tempo de pré-processamento com o tempo de emparelhamento. ((n-m+1)m) + (m) ((n-m)m) (n x m) 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 Se m = n/2, Então O (n/2 x n) O (n2/2) 1/2 O(n2) O(n2)
Rabin-Karp • Realiza pré-processamento do padrão P em tempo O(m) • O tempo de processamento de T O(n) Pior caso: • Realiza o emparelhamento de P em T O((n-m+1)m) = O (m x n) • Se m= n\2, O (n2)
Rabin-Karp RABIN-KARP-MACHER (T, P, d, q) • n ← comprimento[T] • m ← comprimento[P] • h ← d m-1 mod q • p ← 0 • t0 ← 0 • for i ← 1 to m \\ Pré-processamento • do p ← (dp + P[i]) mod q • t0← (t0 + T[i]) mod q • for s ← 0 to n-m \\ Emparelhamento • do if p = ts • then if P [1...m] = T [s + 1 ... s + m] • then “Padrão ocorre no deslocamento” s • if s < n-m • then ts+1 ← (d(ts – T[s+1]h) + T[s+m+1]) mod q Inicializa o hash(p) da palavra e do texto, hash(t) Compara caracteres da substring com a palavra, eliminando o acerto espúrio
Emparelhamento de cadeias com autômatosfinitos • Notação: • Um autômatofinito é uma 5-tupla (Q, q0, A, ,) Onde: Q – Conjunto de estados q0 - Estado Inicial (q0 Q) A – Conjunto de estados de aceitação (A Q) - Alfabeto de entradafinito - Função de transição
Autômato de emparelhamento Autômatoqueaceita a string “ababaca”. b, c c b b, c a b b a a b a c a 0 1 2 3 4 5 6 7 c a a a b, c b, c c
Autômatos e função Entrada Estado a b c 0 1 2 3 4 5 6 7 i – 1 2 3 4 5 6 7 8 9 10 11 T[i] - a b a b a b a c a b a Estado (Ti) 0 1 2 3 4 5 4 5 6 7 2 3
Função de estado final e funçãosufixo • (w) – Função de Estado Final • () = q0 • (wa) = ((w), a) para w *, a • (x) – Função Sufixo • É o comprimento do maislongoprefixo de P que é um sufixo de x • (x) = max{k: Pk x} P = ab () = 0 (ccaca) = 1 (ccab) = 2 • Para um padrão P de comprimento m, temos(x) = m P x
Função de Transição, Função de Estado Final e Função Sufixo • A função de transição é definida pela seguinte equação, para qualquer estado “q” e caractere “a”: • (q, a) = (P qa). • Uma boa razão intuitiva para a definição anterior é: • (Ti) = (Ti)
Autômato de emparelhamento T[i] = a b a b a b a c a b a P = a b a b a c a b, c c b b, c a b b a a b a c a 0 1 2 3 4 5 6 7 c a a a b, c b, c c
Autômato de emparelhamento T[i] = a b a b a b a c a b a P = a b a b a c a b, c c b b, c a b b a a b a c a 0 1 2 3 4 5 6 7 c a a a b, c b, c c
Autômato de emparelhamento T[i] = a b a b a b a c a b a P = a b a b a c a b, c c b b, c a b b a a b a c a 0 1 2 3 4 5 6 7 c a a a b, c b, c c
Autômato de emparelhamento T[i] = a b a b a b a c a b a P = a b a b a c a b, c c b b, c a b b a a b a c a 0 1 2 3 4 5 6 7 c a a a b, c b, c c
Autômato de emparelhamento T[i] = a b a b a b a c a b a P = a b a b a c a b, c c b b, c a b b a a b a c a 0 1 2 3 4 5 6 7 c a a a b, c b, c c
Autômato de emparelhamento T[i] = a b a b a b a c a b a P = a b a b a c a b, c c b b, c a b b a a b a c a 0 1 2 3 4 5 6 7 c a a a b, c b, c c
Autômato de emparelhamento T[i] = a b a b a b a c a b a P = a b a b a c a b, c c b b, c a b b a a b a c a 0 1 2 3 4 5 6 7 c a a a b, c b, c c
Autômato de emparelhamento T[i] = a b a b a b a c a b a P = a b a b a c a b, c c b b, c a b b a a b a c a 0 1 2 3 4 5 6 7 c a a a b, c b, c c