Análise e Síntese de Algoritmos

Slides:



Advertisements
Apresentações semelhantes
Linguagem Fabrício Dias
Advertisements

I - Noções dum compilador
Prof. Yandre Maldonado e Gomes da Costa
Linguagens Formais e Autômatos
Prof. Yandre Maldonado e Gomes da Costa
Análise Léxica (Parte 2)
Análise e Síntese de Algoritmos
Algoritmos de Pesquisa em Cadeias de Caracteres
TEORIA DOS AUTÓMATOS FINITOS E DAS SUAS LINGUAGENS
3 AUTÓMATOS FINITOS.
Máquinas de Turing Não Deterministas
Máquinas de Turing Teoria da Computação.
Teoria da Computação Sandra de Amo
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
Automato de Pilha.
Strings, Linguagens, Autômatos
Minimização; Lema do Bombeamento.
Problemas Algoritmicos
Linguagens e Máquinas WILSON ROSA DE OLIVEIRA DEPARTAMENTO DE INFORMÁTICA UFPE
autômatos finitos com transições e
Construção de Compiladores
Alfabetos, Palavras e Linguagens
Apresentação da linguagem Python
Solução de Equações Diferenciais Ordinárias (EDO):
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
String Matching Emparelhamento de Cadeias Cin – UFPE
Compiladores, Aula Nº 5 João M. P. Cardoso
Análise e Síntese de Algoritmos
Análise e Síntese de Algoritmos
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Ling. Formais e Autômatos AFN-ε
Teoria da Computação Aula 1 Prof. Fabiano Sabha.
Autómatos de Pilha. UM NOVO MODELO PARA OS AUTÓMATOS FINITOS As linguagens regulares são aceites por autómatos finitos. E as linguagens não regulares?
Análise e Síntese de Algoritmos
Aula 18 1 Análise Sintáctica Compiladores, Aula Nº 18 João M. P. Cardoso.
LFA: Unidade 03 – Parte B Engenharia/Ciência da Computação
Cin-UFPE String Matching
Transformada de Hough Processamento global para a detecção de linhas retas numa imagem Nenhum conhecimento é necessário a respeito da posição das linhas.
Estado Final Único para NFAs e DFAs
Redução.
Como analisar um algoritmo
A Classe NP Teoria da Computação Profa. Sandra de Amo.
Prof. André Luis Roland Tancredo Engenheiro da Computação e Pesquisador em Desenvolvimento Tecnológico para Semicondutores pelo CNPq Especialista em Microeletrônica.
Problemas NP-completos e Programação Dinâmica
Intr. à Biologia Computacional ALINHAMENTOS ÓTIMOS GLOBAIS.
Solved Exercises 1. Finding the Peak. Let A= a 1,…,a n be a sequence of n numbers with the following property: there is p in {1,…,n} for which (i) the.
Análise e Síntese de Algoritmos
Exercícios Análise de algoritmos & Ordenação
Análise e Síntese de Algoritmos Estruturas de Dados p/ Conjuntos DisjuntosCLRS, Cap. 21.
Computabilidade e Linguagens Formais
Computabilidade e Linguagens Formais
Análise e Síntese de Algoritmos
Analise de Algoritmos e Notação Assintótica
Computabilidade e Linguagens Formais
Análise e Síntese de Algoritmos
Análise e Síntese de Algoritmos
Análise e Síntese de Algoritmos Algoritmos GreedyCLRS, Cap. 16.
Engenharia/Ciência da Computação
Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville
Aula 6 1 Análise Lexical Compiladores, Aula Nº 6 João M. P. Cardoso.
Programação Dinâmica IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes.
Alinhamento Global de Seqüências Katia Guimarães.
Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo.
1 Decidibilidade continuação…. 2 Teorema: Para qualquer linguagem recursivamente enumerável é indecidível determinar se é finita Prova: Vamos reduzir.
COMPILADORES 03 Prof. Marcos.
Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE
Transcrição da apresentação:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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