Análise e Síntese de Algoritmos

19

Click here to load reader

description

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 - PowerPoint PPT Presentation

Transcript of Análise e Síntese de Algoritmos

Page 1: Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos

Emparelhamento de Cadeias de Caracteres CLRS, Cap. 32

Page 2: Análise e Síntese de Algoritmos

2003/2004 Análise e Síntese de Algoritmos 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

Page 3: Análise e Síntese de Algoritmos

2003/2004 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

Page 4: Análise e Síntese de Algoritmos

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

Page 5: Análise e Síntese de Algoritmos

2003/2004 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

Page 6: Análise e Síntese de Algoritmos

2003/2004 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]

Page 7: Análise e Síntese de Algoritmos

2003/2004 Análise e Síntese de Algoritmos 7

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)

Page 8: Análise e Síntese de Algoritmos

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

Page 9: Análise e Síntese de Algoritmos

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

Page 10: Análise e Síntese de Algoritmos

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

Page 11: Análise e Síntese de Algoritmos

2003/2004 Análise e Síntese de Algoritmos 11

Autómatos Finitos (Cont.)

• Exemplos

Finite-Automaton-Matcher(T, , m)n = length[T]q = 0for i = 1 to n

q = (q,T[i])if q = m

s = i - mPrint “Padrão encontrado com deslocação”, s

Page 12: Análise e Síntese de Algoritmos

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 - 1until Pk Pqa (q,a) = k

return

Identificar maiork tal que Pk éum sufixo de Pqa

Page 13: Análise e Síntese de Algoritmos

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])

Page 14: Análise e Síntese de Algoritmos

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]]

Page 15: Análise e Síntese de Algoritmos

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 = 0for 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 = mPrint “Padrão encontrado com deslocação”, i-mq = [q]

Page 16: Análise e Síntese de Algoritmos

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]]

Page 17: Análise e Síntese de Algoritmos

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] = 0k = 0for 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] = kreturn

Page 18: Análise e Síntese de Algoritmos

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

Page 19: Análise e Síntese de Algoritmos

2003/2004 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)