Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouMilena Maria de Lourdes Porto Brás Alterado mais de 8 anos atrás
1
Análise e Síntese de Algoritmos
Emparelhamento de Cadeias de Caracteres CLRS, Cap. 32
2
Análise e Síntese de Algoritmos
Contexto Revisão Algoritmos em Grafos Programação Linear Programação Dinâmica Algoritmos Greedy Emparelhamento de Cadeias de Caracteres Problemas NP-Completos Algoritmos de Aproximação 2003/2004 Análise e Síntese de Algoritmos
3
Análise e Síntese de Algoritmos
Resumo Emparelhamento de Cadeias de Caracteres (String Matching) Definição do problema Notação Algoritmo elementar Utilização de autómatos finitos Algoritmo de Knuth-Morris-Pratt Outros algoritmos Rabin-Karp 2003/2004 Análise e Síntese de Algoritmos
4
Formulação do Problema
Texto: array com n caracteres, T[1..n] Padrão: array com m caracteres, P[1..m] Caracteres pertencentes a alfabeto finito Padrão P ocorre com deslocamento s em T se: 0 s n-m T[s+1..s+m] = P[1..m] Exemplo: T = aabababab P = ababab P ocorre em T com deslocamentos 1 e 3 2003/2004 Análise e Síntese de Algoritmos
5
Análise e Síntese de Algoritmos
Notação Conjunto de todas as cadeias de caracteres (strings) de comprimento finito: * String vazia: * Comprimento da string x, x Concatenação de x e y: Representação: xy Comprimento: x+y 2003/2004 Análise e Síntese de Algoritmos
6
Análise e Síntese de Algoritmos
Notação (Cont.) w é prefixo de x, w x, se x = wy, com y * w é sufixo de x, w x, se x = yw, com y * Se w x, então w x Sejam x, y e z strings tais que x z e y z. Então, Se x y, então x y Se x y, então y x Se x = y, então x = y Prefixos do padrão pretendido P0 = ; Pk = P[1..k] Tk = T[1..k] 2003/2004 Análise e Síntese de Algoritmos
7
Análise e Síntese de Algoritmos
Algoritmo Elementar Complexidade: ((n-m+1)m) Exemplo Naive-String-Matcher(T, P) n = length[T] m = length[P] for s = 0 to n - m if P[1..m] = T[s+1..s+m] print “Padrão encontrado com deslocação”, s (m) 2003/2004 Análise e Síntese de Algoritmos
8
Utilização de Autómatos Finitos
Autómato finito M (Q, q0, A, , ): Q é um conjunto finito de estados q0 é o estado inicial A Q é um conjunto de estados de aceitação é o alfabeto de entrada é uma função de Q em Q, designada função de transição de M Autómato no estado q, com caracter de entrada a, novo estado é dado por (q,a) Utilizar DFA para aceitar padrão pretendido 2003/2004 Análise e Síntese de Algoritmos
9
Autómatos Finitos (Cont.)
Função de estados finais: (w): estado de M após ter lido string w M aceita w se e só se (w) A Definição: () = q0 (wa) = ((w),a), para w *, a 2003/2004 Análise e Síntese de Algoritmos
10
Autómatos Finitos (Cont.)
Função de sufixo para P[1..m]: : * { 0, 1, …, m } (x) = max { k: Pk x } Comprimento do maior prefixo de P que é sufixo de x Saber em que estado DFA deve estar dada a string x Dado x, qual o maior prefixo de P que é também sufixo de x? Autómato para emparelhamento de strings: Q = { 0, 1, …, m } Função de transição: (q,a) = (Pqa) (invariante: (Ti) = (Ti)) Novo estado (q,a) corresponde ao prefixo de P com o maior comprimento que é também sufixo de Pqa 2003/2004 Análise e Síntese de Algoritmos
11
Autómatos Finitos (Cont.)
Exemplos Finite-Automaton-Matcher(T, , m) n = length[T] q = 0 for i = 1 to n q = (q,T[i]) if q = m s = i - m Print “Padrão encontrado com deslocação”, s 2003/2004 Análise e Síntese de Algoritmos
12
Autómatos Finitos (Cont.)
Complexidade do cálculo de : O(m3) Complexidade do algoritmo: O(n + m3) É possível obter O(n + m) Compute-Transition-Function(P, ) m = length[P] for q = 0 to m foreach a k = min(m+1,q+2) repeat k = k - 1 until Pk Pqa (q,a) = k return Identificar maior k tal que Pk é um sufixo de Pqa 2003/2004 Análise e Síntese de Algoritmos
13
Algoritmo de Knuth-Morris-Pratt
Complexidade: O(n + m) Evita cálculo da função de transição ! Função de prefixo para o padrão P: : { 1, 2, …, m } { 0, 1, …, m-1 } [q] = max { k : k < q e Pk Pq } Comprimento do maior prefixo de P que é sufixo de Pq Caso o próximo caracter de T não emparelhe, [q] indica qual o maior prefixo de P que é possível obter como sufixo de Pq sabendo que em T existe neste momento (i.e. em Ti) o sufixo Pq (e que P[q+1] T[i+1]) 2003/2004 Análise e Síntese de Algoritmos
14
Algoritmo de Knuth-Morris-Pratt (Cont.)
Se P[k + 1] T[i], então Pk+1 não é sufixo de Ti Encontrar j tal que Pj seja sufixo de Ti Observar que: Pk Ti-1 P[k] Pk maior sufixo de Pk e Ti-1 que é menor que Pk P[[k]] P[k] maior sufixo de P[k], Pk e Ti-1 que é menor que P[k] … Ti-1 Pk P[k] P[[k]] 2003/2004 Análise e Síntese de Algoritmos
15
Algoritmo de Knuth-Morris-Pratt (Cont.)
KMP-Matcher(T, P) n = length[T] m = length[P] = Compute-Prefix-Function(P) q = 0 for i = 1 to n while q > 0 e P[q + 1] T[i] q = [q] if P[q + 1] = T[i] q = q + 1 if q = m Print “Padrão encontrado com deslocação”, i-m 2003/2004 Análise e Síntese de Algoritmos
16
Algoritmo de Knuth-Morris-Pratt (Cont.)
Se P[k + 1] P[q] então Pk+1 não é sufixo de Pq Encontrar j tal que Pj seja sufixo de Pq Observar que: Pk Pq-1 P[k] Pk maior sufixo de Pk e Pq-1 que é menor do que Pk P[[k]] P[k] maior sufixo de P[k], Pk e Pq-1 que é menor do que P[k] … Pq-1 Pk P[k] P[[k]] 2003/2004 Análise e Síntese de Algoritmos
17
Algoritmo de Knuth-Morris-Pratt (Cont.)
Exemplos Compute-Prefix-Function(P, ) m = length[P] [1] = 0 k = 0 for q = 2 to m while k > 0 e P[k + 1] P[q] k = [k] if P[k + 1] = P[q] k = k + 1 [q] = k return 2003/2004 Análise e Síntese de Algoritmos
18
Algoritmo de Knuth-Morris-Pratt (Cont.)
Complexidade: Compute-Prefix-Function: O(m) k é incrementado de 1 unidade não mais do que uma vez por cada valor de q, com número total de incrementos limitado superiormente por m Valor de k decrementado devido a atribuição k = [k], mas k > 0 e valor acumulado de decremento limitado a um total de m unidades KMP-Matcher: O(n + m) Análise semelhante à anterior permite obter resultado 2003/2004 Análise e Síntese de Algoritmos
19
Análise e Síntese de Algoritmos
Revisão Emparelhamento de cadeiras caracteres Algoritmo elementar Utilização de autómatos finitos Algoritmo de Knuth-Morris-Pratt Outros algoritmos Rabin-Karp Boyer Moore ... A seguir: Problemas NP-Completos (CLRS, Cap. 34) Algoritmos de aproximação (CLRS, Cap. 35) 2003/2004 Análise e Síntese de Algoritmos
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.