A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Análise e Síntese de Algoritmos

Apresentações semelhantes


Apresentação em tema: "Análise e Síntese de Algoritmos"— Transcrição da apresentação:

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


Carregar ppt "Análise e Síntese de Algoritmos"

Apresentações semelhantes


Anúncios Google