1 / 19

Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos. Emparelhamento de Cadeias de Caracteres CLRS, Cap. 32. Contexto. Revisão Algoritmos em Grafos Programação Linear Programação Dinâmica Algoritmos Greedy Emparelhamento de Cadeias de Caracteres Problemas NP-Completos

tannar
Download Presentation

Análise e Síntese de Algoritmos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Análise e Síntese de Algoritmos Emparelhamento de Cadeias de Caracteres CLRS, Cap. 32

  2. 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 Análise e Síntese de Algoritmos

  3. 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 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 Análise e Síntese de Algoritmos

  5. 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 Análise e Síntese de Algoritmos

  6. 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] Análise e Síntese de Algoritmos

  7. (m) 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 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 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   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 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 Análise e Síntese de Algoritmos

  12. Identificar maior k tal que Pk é um sufixo de Pqa 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 untilPk Pqa (q,a) = k return  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]) Análise e Síntese de Algoritmos

  14. Ti-1 Pk P[k] P[[k]] Algoritmo de Knuth-Morris-Pratt (Cont.) • Se P[k + 1]  T[i], então Pk+1nã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] • … 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 q = [q] Análise e Síntese de Algoritmos

  16. Pq-1 Pk P[k] P[[k]] Algoritmo de Knuth-Morris-Pratt (Cont.) • Se P[k + 1]  P[q] então Pk+1nã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] • … 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 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 Análise e Síntese de Algoritmos

  19. 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) Análise e Síntese de Algoritmos

More Related