Subsequência comum mais longa Em inglês, Longest Common Subsequence (LCS)

Tamanho: px
Começar a partir da página:

Download "Subsequência comum mais longa Em inglês, Longest Common Subsequence (LCS)"

Transcrição

1 Programação Dinâmica Subsequência comum mais longa Em inglês, Longest Common Subsequence (LCS) Fernando Lobo Algoritmos e Estrutura de Dados II 1 / 23 Longest Common Subsequence (LCS) Dadas duas sequências, X = x 1 x 2... x m e Y = y 1 y 2... y n, encontrar uma subsequência comum a X e Y que seja o mais longa possível. Exemplo: X = n o c t u r n o Y = m o s q u i t e i r o LCS(X, Y ) = o t r o (também podia ser o u r o) 2 / 23

2 Algoritmo de força bruta Gerar todas as subsequências de X e verificar se também é subsequência de Y, e ir guardando a subsequência mais longa vista até ao momento. Complexidade? Θ(2 m ) para gerar todas as subsequências de X. Θ(n) para verificar se uma subsequência de X é subsequência de Y. Total: Θ(n 2 m ) É exponencial. Muito mau! 3 / 23 Será que podemos aplicar Programação Dinâmica? Se sim teremos de conseguir definir o problema recursivamente em termos de subproblemas. O n o de subproblemas tem de ser relativamente pequeno (polinomial em n e m) para que a Programação Dinâmica seja útil. Depois de definir o problema em termos de subproblemas, podemos resolver o problema de baixo para cima, começando pelos casos base e armazenando as soluções dos subproblemas. 4 / 23

3 Subestrutura óptima Vamos olhar para prefixos de X e Y. Seja X i o prefixo dos i primeiros elementos de X. Exemplo: X = n o c t u r n o X 4 = n o c t X0 = X3 = n o c X 8 = n o c t u r n o 5 / 23 Subestrutura óptima Seja X = x 1 x 2... x m e Y = y 1 y 2... y n. Seja Z = z 1 z 2... z k uma LCS entre X e Y. Três casos: 1. Se x m = y n, então z k = x m = y n e Z k 1 é uma LCS entre X m 1 e Y n Se x m y n e z k x m, então Z é uma LCS entre X m 1 e Y n. 3. Se x m y n e z k y n, então Z é uma LCS entre X m e Y n 1. 6 / 23

4 Demonstração do caso 1 Caso 1: Se x m = y n, então z k = x m = y n e Z k 1 é uma LCS entre X m 1 e Y n 1. Teremos de provar que z k = x m = y n. Suponhamos que tal não é verdade. Então a subsequência Z = z 1 z 2... z k x m é uma subsequência comum a X e Y e tem comprimento k + 1. Contradiz o facto de Z ser uma LCS entre X e Y. 7 / 23 Demonstração do caso 1 (cont.) Agora temos de provar que Z k 1 é uma LCS entre X m 1 e Y n 1. Suponhamos que existe uma subsequência W comum a X m 1 e Y n 1 que é mais longa que Z k 1. comprimento de W k. A subsequência W = W x m é comum a X e Y e tem comprimento k + 1. Contradiz o facto de Z ser uma LCS entre X e Y. 8 / 23

5 Demonstração dos casos 2 e 3 Caso 2: Se x m y n e z k x m, então Z é uma LCS entre X m 1 e Y n. Suponhamos que existe uma subsequência W comum a X m 1 e Y n com comprimento > k. Então W é uma subsequência comum entre X e Y. = Contradiz o facto de Z ser uma LCS entre X e Y. Caso 3: Se x m y n e z k y n, então Z é uma LCS entre X m e Y n 1. A demonstração do caso 3 é análoga à do caso 2. 9 / 23 Resumindo Podemos definir LCS(X m, Y n ) em termos de subproblemas., se m = 0 ou n = 0 LCS(X m, Y n ) = LCS(X m 1, Y n 1 ) x m, se x m = y n LCS(X m 1, Y n ) ou LCS(X m, Y n 1 ), se x m y n 10 / 23

6 Comprimento de LCS(X, Y ) Vamos tentar primeiro resolver um problema mais simples: Obter LCS(X, Y ) o comprimento de LCS(X, Y ) Seja c[i, j] = LCS(X i, Y j ) Queremos obter c[m, n] 11 / 23 Definição recursiva de c[i, j] c[i, j] = 0, se i = 0 ou j = 0 c[i 1, j 1] + 1, se i, j > 0 e x i = y j max(c[i 1, j], c[i, j 1]), se i, j > 0 e x i y j 12 / 23

7 Algortimo recursivo LCS-Length-Rec(X, Y, i, j) if i == 0 or j == 0 return 0 elseif X [i] == Y [j] return LCS-Length-Rec(X, Y, i 1, j 1) + 1 else a = LCS-Length-Rec(X, Y, i 1, j) b = LCS-Length-Rec(X, Y, i, j 1) return max(a, b) Chamada inicial: LCS-Length-Rec(X, Y, m, n) Tal como em Fib-Rec e Comb-Rec, a árvore dá origem a muitos subproblemas repetidos. O algoritmo é exponencial. Mas o número de subproblemas distintos = m n. 13 / 23 Podemos usar Programação Dinâmica LCS-Length-DP(X, Y ) m = X.length n = Y.length for i = 1 to m c[i, 0] = 0 for j = 0 to n c[0, j] = 0 for i = 1 to m for j = 1 to n if X [i] == Y [j] c[i, j] = c[i 1, j 1] + 1 elseif c[i 1, j] c[i, j 1] c[i, j] = c[i 1, j] else c[i, j] = c[i, j 1] return c[m, n] 14 / 23

8 Demo c[i, j] é preenchida linha a linha, da esquerda para a direita. 15 / 23 Como obter a LCS própriamente dita? O nosso algoritmo apenas obteve o comprimento da LCS. A ideia é alterar o código de LCS-Length-DP e, de cada vez que obtemos um c[i, j], registamos como é que ele foi obtido. Isso permite-nos reconstruir a solução. 16 / 23

9 Aqui vai o código alterado LCS-Length-DP-v2(X, Y ). for i = 1 to m for j = 1 to n if X [i] == Y [j] c[i, j] = c[i 1, j 1] + 1 b[i, j] = elseif c[i 1, j] c[i, j 1] c[i, j] = c[i 1, j] b[i, j] = else c[i, j] = c[i, j 1] b[i, j] = return c[m, n], b 17 / 23 Demo As setas, e são armazenadas em b[i, j]. b[i, j] indica o subproblema escolhido para obter c[i, j]. 18 / 23

10 Uma vez tendo a informação em b, podemos obter uma LCS entre X e Y. A chamada inicial é Print-LCS(b, X, m, n) Print-LCS(b, X, i, j) if i == 0 or j == 0 return // Não faz nada if b[i, j] == Print-LCS(b, X, i 1, j 1) print X [i] elseif b[i, j] == Print-LCS(b, X, i 1, j) else Print-LCS(b, X, i, j 1) 19 / 23 Complexidade A complexidade é Θ(m n) A Programação Dinâmica reduziu a complexidade de exponencial para polinomial. No livro têm mais exemplos de problemas resolvidos com Programação Dinâmica. 20 / 23

11 Versão memoized de LCS-Length LCS-Length-Memoized(X, Y ) m = X.length n = Y.length for i = 0 to m for j = 0 to n c[i, j] = unknown return M-LCS-Length(X, Y, m, n) 21 / 23 M-LCS-Length(X, Y, i, j) if c[i, j] == unknown if i == 0 or j == 0 c[i, j] = 0 elseif X [i] == Y [j] c[i, j] = M-LCS-Length(X, Y, i 1, j 1) + 1 else a = M-LCS-Length(X, Y, i 1, j) b = M-LCS-Length(X, Y, i, j 1) c[i, j] = max(a, b) return c[i, j] 22 / 23

12 Como aplicar a Programação Dinâmica? Para aplicarmos Programação Dinâmica ou Memoization para resolver um problema, temos de fazer 4 coisas: 1. Caracterizar a estrutura de uma solução óptima. 2. Definir o valor da solução óptima recursivamente em termos de subsoluções óptimas. 3. Calcular o valor de uma solução óptima de baixo para cima (no caso de P.D.) ou de cima para baixo (no caso de Memoization). 4. Obter a solução óptima através da informação calculada e armazenada no passo / 23

Fernando Lobo. Algoritmos e Estrutura de Dados. Outra técnica de concepção de algoritmos, tal como Divisão e Conquista.

Fernando Lobo. Algoritmos e Estrutura de Dados. Outra técnica de concepção de algoritmos, tal como Divisão e Conquista. Programação Dinâmica Fernando Lobo Algoritmos e Estrutura de Dados 1 / 56 Programação Dinâmica Outra técnica de concepção de algoritmos, tal como Divisão e Conquista. O termo Programação Dinâmica é um

Leia mais

Comparação com Divisão e Conquista

Comparação com Divisão e Conquista Programação Dinâmica Programação Dinâmica Fernando Lobo Algoritmos e Estrutura de Dados II Outra técnica de concepção de algoritmos, tal como Divisão e Conquista ou Estratégias Greedy. O termo Programação

Leia mais

Disciplina de Projetos e Análise de Algoritmos

Disciplina de Projetos e Análise de Algoritmos Aula 6 - A Maior Subsequência Comum Possível (Programação Dinâmica Parte IV) Aplicações na Biologia Um problema bastante em voga na Biologia é a análise do DNA de dois ou mais organismos distintos. Um

Leia mais

Análise e Síntese de Algoritmos. Programação Dinâmica CLRS, Cap. 15

Análise e Síntese de Algoritmos. Programação Dinâmica CLRS, Cap. 15 Análise e Síntese de Algoritmos Programação Dinâmica CLRS, Cap. 15 Contexto Revisões [CLRS, Cap. 1-10] Algoritmos em Grafos [CLRS, Cap. 22-26] Algoritmos elementares Árvores abrangentes Caminhos mais curtos

Leia mais

PROGRAMAÇÃO DINÂMICA

PROGRAMAÇÃO DINÂMICA PROGRAMAÇÃO DINÂMICA Programação dinâmica é tipicamente aplicada para problemas de otimização. O desenvolvimento de um algoritmo de programação dinâmica pode ser divido em 4 etapas. Caracterizar uma solução

Leia mais

Divisão e Conquista: Par de Pontos mais Próximo

Divisão e Conquista: Par de Pontos mais Próximo Divisão e Conquista: Par de Pontos mais Próximo Fernando Lobo Algoritmos e Estrutura de Dados II 1 / 18 Divisão e Conquista (cont.) Problema: Dado um conjunto de pontos no plano, obter o par de pontos

Leia mais

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo ( Análise de Problemas Recursivos Algoritmos e Estruturas de Dados 2 2017-1 Flavio Figueiredo (http://flaviovdf.github.io) 1 Lembrando de Recursividade Procedimento que chama a si mesmo Recursividade permite

Leia mais

Análise e Complexidade de Algoritmos

Análise e Complexidade de Algoritmos Análise e Complexidade de Algoritmos Principais paradigmas do projeto de algoritmos - Recursividade - Tentativa e erro - Divisão e Conquista - Programação dinâmica - Algoritmos Gulosos e de Aproximação

Leia mais

Programação Dinâmica. Programa do PA. Técnicas Avançadas de Projeto. Aulas Anteriores. Introdução. Plano de Aula. Técnicas de Projeto de Algoritmos

Programação Dinâmica. Programa do PA. Técnicas Avançadas de Projeto. Aulas Anteriores. Introdução. Plano de Aula. Técnicas de Projeto de Algoritmos Programação Dinâmica Técnicas de Projeto de Algoritmos Aula 13 Alessandro L. Koerich Pontifícia Universidade Católica do Paraná (PUCPR) Ciência da Computação 7 o Período Engenharia de Computação 5 o Período

Leia mais

Programação Dinâmica. Prof. Anderson Almeida Ferreira. Adaptado do material elaborado por Andrea Iabrudi Tavares

Programação Dinâmica. Prof. Anderson Almeida Ferreira. Adaptado do material elaborado por Andrea Iabrudi Tavares Programação Dinâmica Prof. Anderson Almeida Ferreira Adaptado do material elaborado por Andrea Iabrudi Tavares Programação Dinâmica 1950, Bellman Evitar recálculos dos subproblemas em comum Menor para

Leia mais

Projeto e Análise de Algoritmos Projeto de Algoritmos Programação Dinâmica. Prof. Humberto Brandão

Projeto e Análise de Algoritmos Projeto de Algoritmos Programação Dinâmica. Prof. Humberto Brandão Projeto e Análise de Algoritmos Projeto de Algoritmos Programação Dinâmica Prof. Humberto Brandão [email protected] Universidade Federal de Alfenas versão da aula: 0.3 Programação Dinâmica

Leia mais

Problema da Mochila Booleana: Uma Solução Usando Programação Dinâmica. Gabriel Rosa Guilherme Alves

Problema da Mochila Booleana: Uma Solução Usando Programação Dinâmica. Gabriel Rosa Guilherme Alves Problema da Mochila Booleana: Uma Solução Usando Programação Dinâmica Gabriel Rosa Guilherme Alves Agenda O problema, definição e exemplo Construindo uma solução... Expressão recursiva Algoritmo recursivo

Leia mais

Análise e Complexidade de Algoritmos

Análise e Complexidade de Algoritmos Análise e Complexidade de Algoritmos Professor Ariel da Silva Dias Algoritmos Divisão e Conquista Construção incremental Resolver o problema para um sub-conjunto dos elementos de entrada; Então, adicionar

Leia mais

Complexidade de Algoritmos. Edson Prestes

Complexidade de Algoritmos. Edson Prestes Edson Prestes Programação Dinâmica A programação dinâmica costuma ser aplicada a problemas de otimização resultando, em geral, em algoritmos mais eficientes que os mais diretos. Esse método é útil quando

Leia mais

AED2 - Aula 11 Problema da separação e quicksort

AED2 - Aula 11 Problema da separação e quicksort AED2 - Aula 11 Problema da separação e quicksort Projeto de algoritmos por divisão e conquista Dividir: o problema é dividido em subproblemas menores do mesmo tipo. Conquistar: os subproblemas são resolvidos

Leia mais

Divisão e Conquista. Norton T. Roman. Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder

Divisão e Conquista. Norton T. Roman. Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder Divisão e Conquista Norton T. Roman Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder Divisão e Conquista Construção incremental Ex: Consiste em, inicialmente, resolver

Leia mais

Programação Dinâmica I SCC0210 Algoritmos Avançados (2/2011) Lucas Schmidt Cavalcante

Programação Dinâmica I SCC0210 Algoritmos Avançados (2/2011) Lucas Schmidt Cavalcante Programação Dinâmica I SCC0210 Algoritmos Avançados (2/2011) Lucas Schmidt Cavalcante Introdução Soma máxima de uma subsequência contígua Problema do troco Quantidade de formas de dar troco Problema da

Leia mais

Pedro Ribeiro 2014/2015

Pedro Ribeiro 2014/2015 Programação Dinâmica Pedro Ribeiro DCC/FCUP 2014/2015 Pedro Ribeiro (DCC/FCUP) Programação Dinâmica 2014/2015 1 / 56 Números de Fibonacci Sequência de números muito famosa definida por Leonardo Fibonacci

Leia mais

O Cálculo λ sem Tipos

O Cálculo λ sem Tipos Capítulo 2 O Cálculo λ sem Tipos 21 Síntaxe e Redução Por volta de 1930 o cálculo lambda sem tipos foi introduzido como uma fundação para a lógica e a matemática Embora este objectivo não tenha sido cumprido

Leia mais

Algoritmos de Ordenação

Algoritmos de Ordenação Algoritmos de Ordenação Introdução à Ciência da Computação Prof. Edison Ishikawa Objetivo Apresentar diferentes algoritmos de ordenação de dados Mostrar como analisar os algoritmos em termos de tempo de

Leia mais

Problema de seleção de atividades. Aula 14. Exemplo. Algoritmos Gulosos. Algoritmos Gulosos. Intervalo: par ordenado de números

Problema de seleção de atividades. Aula 14. Exemplo. Algoritmos Gulosos. Algoritmos Gulosos. Intervalo: par ordenado de números Problema de seleção de atividades Aula 14 Algoritmos Gulosos Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Intervalo: par ordenado de números [s[i],f[i]): início e fim do intervalo

Leia mais

Análise de Complexidade para algoritmos iterativos e recursivos

Análise de Complexidade para algoritmos iterativos e recursivos Disciplina: Matemática Discreta Agostinho Iaqchan Ryokiti Homa Análise de Complexidade para algoritmos iterativos e recursivos Algoritmos iterativos - complexidade expressa através de somatórios. Algoritmos

Leia mais

Complexidade de Algoritmos

Complexidade de Algoritmos MAC 5710 - Estruturas de Dados - 2008 Objetivo de estudar complexidade de algoritmos Por que analisar a complexidade dos algoritmos? A preocupação com a complexidade de algoritmos é fundamental para projetar

Leia mais

ESCOLA SECUNDÁRIA COM 3º CICLO D. DINIS 10º ANO DE MATEMÁTICA A Tema II Funções e Gráficos. Funções polinomiais. Função módulo.

ESCOLA SECUNDÁRIA COM 3º CICLO D. DINIS 10º ANO DE MATEMÁTICA A Tema II Funções e Gráficos. Funções polinomiais. Função módulo. ESCOLA SECUNDÁRIA COM º CICLO D. DINIS 0º ANO DE MATEMÁTICA A Ponto três do plano de trabalho nº 5 Tarefa nº 4. Considere a família de funções polinomiais: f(x) = a(x + )(x )(x + 5), a \ {0}.. Represente

Leia mais

Algoritmos e Estruturas de Dados I. Recursividade. Pedro O.S. Vaz de Melo

Algoritmos e Estruturas de Dados I. Recursividade. Pedro O.S. Vaz de Melo Algoritmos e Estruturas de Dados I Recursividade Pedro O.S. Vaz de Melo Problema Implemente uma função que classifique os elementos de um vetor em ordem crescente usando o algoritmo quicksort: 1. Seja

Leia mais

Análise e Projeto de Algoritmos

Análise e Projeto de Algoritmos Análise e Projeto de Algoritmos 2018.2 Classes P e NP P São os problemas que podem ser resolvidos em tempo polinomial por uma Máquina de Turing Determinística. NP São os problemas que podem ser decididos

Leia mais

Paradigmas de Projeto de Algoritmos

Paradigmas de Projeto de Algoritmos Projeto de Algoritmos Cap.2 Paradigmas de Projeto de Algoritmos 1 Paradigmas de Projeto de Algoritmos indução, recursividade, Paradigmas de Projeto de Algoritmos algoritmos tentativa e erro, divisão e

Leia mais

Agenda. Complexidade Não Determinista A classe NP. A classe Co-NP Reduções de tempo polinomial. Definida por. Exemplos em:

Agenda. Complexidade Não Determinista A classe NP. A classe Co-NP Reduções de tempo polinomial. Definida por. Exemplos em: A Classe NP Agenda Complexidade Não Determinista A classe NP Definida por aceitação em tempo polinomial por NTM s instâncias positivas com provas de tamanho polinomial aceitação por verificadores em tempo

Leia mais

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort Mergesort Aula 0 Divisão e Conquista- MergeSort Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Mergesort é um algoritmo de ordenação recursivo Ele recursivamente ordena as duas

Leia mais

> Princípios de Contagem e Enumeração Computacional 1/13

> Princípios de Contagem e Enumeração Computacional 1/13 Princípios de Contagem e Enumeração Computacional > Princípios de Contagem e Enumeração Computacional 1/13 Objetivos Contar/listar o número de elementos de conjuntos finitos Aplicações > Princípios de

Leia mais

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/14 3 - INDUÇÃO E RECURSÃO 3.1) Indução Matemática 3.2)

Leia mais

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser executado 1 Fazendo estimativas e simplificações... O número

Leia mais

SCC0601 Projeto de Algoritmos. Recursão

SCC0601 Projeto de Algoritmos. Recursão SCC0601 Projeto de Algoritmos Recursão Definição Uma função é dita recursiva quando é definida em seus próprios termos, direta ou indiretamente Dicionário Michaelis: ato ou efeito de recorrer Recorrer:

Leia mais

Mochila. Dados dois vetores x[1..n] e w[1..n], denotamos por x w o produto escalar

Mochila. Dados dois vetores x[1..n] e w[1..n], denotamos por x w o produto escalar Mochila Dados dois vetores x[1..n] e w[1..n], denotamos por x w o produto escalar w[1]x[1] + w[2]x[2] + + w[n]x[n]. Suponha dado um número inteiro não-negativo W e vetores positivos w[1..n] e v[1..n].

Leia mais

Análise e Projeto de Algoritmos

Análise e Projeto de Algoritmos Análise e Projeto de Algoritmos Prof. Eduardo Barrére www.ufjf.br/pgcc www.dcc.ufjf.br [email protected] www.barrere.ufjf.br Solução de recorrências Para analisar o consumo de tempo de um algoritmo

Leia mais

Programação dinâmica

Programação dinâmica Programação dinâmica CLRS 15.2 15.3 = recursão com tabela = transformação inteligente de recursão em iteração Algoritmos p. 1 Multiplicação iterada de matrizes Se A é p q e B é q r então AB é p r. (AB)[i,j]

Leia mais

Introdução à Programação / Programação I

Introdução à Programação / Programação I Introdução à Programação / Programação I Aula 18: Definições recursivas Rita P. Ribeiro 2017/2018 Departamento de Ciência de Computadores Nesta aula 1. Definições recursivas 2. Exemplos INTRODUÇÃO À PROGRAMAÇÃO

Leia mais

CES-11. Noções de complexidade de algoritmos. Complexidade de algoritmos. Avaliação do tempo de execução. Razão de crescimento desse tempo.

CES-11. Noções de complexidade de algoritmos. Complexidade de algoritmos. Avaliação do tempo de execução. Razão de crescimento desse tempo. CES-11 Noções de complexidade de algoritmos Complexidade de algoritmos Avaliação do tempo de execução Razão de crescimento desse tempo Notação O Exercícios COMPLEXIDADE DE ALGORITMOS Importância de análise

Leia mais

Paradigmas de Projeto de Algoritmos

Paradigmas de Projeto de Algoritmos Projeto de Algoritmos Cap.2 Paradigmas de Projeto de Algoritmos 1 Paradigmas de Projeto de Algoritmos indução, recursividade, algoritmos tentativa e erro, Paradigmas de Projeto de Algoritmos divisão e

Leia mais

PCC104 - Projeto e Análise de Algoritmos

PCC104 - Projeto e Análise de Algoritmos PCC104 - Projeto e Análise de Algoritmos Marco Antonio M. Carvalho Departamento de Computação Instituto de Ciências Exatas e Biológicas Universidade Federal de Ouro Preto 11 de agosto de 2017 Marco Antonio

Leia mais

Sub Rotinas. Estrutura de Dados. Prof. Kleber Rezende

Sub Rotinas. Estrutura de Dados. Prof. Kleber Rezende Sub Rotinas Estrutura de Dados Prof. Kleber Rezende Considerações Iniciais Uma dos métodos mais comuns e amplamente utilizados em programação de computadores é o Top-Down. Nesta abordagem um problema é

Leia mais

Técnicas Inteligência Artificial

Técnicas Inteligência Artificial Universidade do Sul de Santa Catarina Ciência da Computação Técnicas Inteligência Artificial Aula 03 Métodos de Busca Parte 1 Prof. Max Pereira Solução de Problemas como Busca Um problema pode ser considerado

Leia mais

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação Soluções do primeiro teste 13 de Novembro de 2004 9:00-10:30 Nota Número: 20 Nome: Turma: Escreva o seu número em todas as folhas do teste. O espaço das respostas deve ser limitado

Leia mais

Estruturas Discretas

Estruturas Discretas Estruturas Discretas 2017.2 Marco Molinaro > Indução Forte Corretude de Algoritmos 1/20 Indução Forte > Indução Forte Corretude de Algoritmos 2/20 Indução Forte X Indução Fraca Para provar Propriedade

Leia mais

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( ) Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista (2.1-2.2) DECOM/UFOP 2013/1 5º. Período Anderson Almeida Ferreira Adaptado do material desenvolvido por Andréa Iabrudi

Leia mais

Informática para Ciências e Engenharias 2013/14. Teórica 7

Informática para Ciências e Engenharias 2013/14. Teórica 7 Informática para Ciências e Engenharias 2013/14 Teórica 7 Na aula de hoje... Controlo de execução ciclos condicionais while end Exemplos raiz quadrada histograma fórmula química while while e matrizes

Leia mais

Programação Dinâmica

Programação Dinâmica fib(5) fib(4) fib(3) fib(3) fib(2) fib(2) fib(1) fib(2) fib(1) fib(1) fib(0) fib(1) fib(0) fib(1) fib(0) Uma metodologia de resolução de problemas Center for Research in Advanced Computing Systems (CRACS

Leia mais

Aula 22: Formulações com número exponencial de variáveis

Aula 22: Formulações com número exponencial de variáveis Aula 22: Formulações com número exponencial de variáveis Otimização Linear e Inteira Túlio Toffolo http://www.toffolo.com.br BCC464 / PCC174 2018/2 Departamento de Computação UFOP Aula de Hoje 1 Correção

Leia mais

Algoritmos Gulosos. Norton T. Roman

Algoritmos Gulosos. Norton T. Roman Algoritmos Gulosos Norton T. Roman Apostila baseada no trabalho de Delano M. Beder, Luciano Digianpietri, David Matuszek, Marco Aurelio Stefanes e Nivio Ziviani Algoritmos Gulosos São aqueles que, a cada

Leia mais

P, NP e NP-Completo. André Vignatti DINF- UFPR

P, NP e NP-Completo. André Vignatti DINF- UFPR P, NP e NP-Completo André Vignatti DINF- UFPR Problemas Difíceis, Problemas Fáceis O mundo está cheio de problemas de busca. Alguns podem ser resolvidos eficientemente, outros parecem ser muito difíceis.

Leia mais

Complexidade de Algoritmos. Edson Prestes

Complexidade de Algoritmos. Edson Prestes Edson Prestes A classe P consiste nos problemas que podem ser resolvidos em tempo Polinomial (Problemas tratáveis) A classe NP consiste nos problemas que podem ser verificados em tempo polinomial (Problemas

Leia mais

tipo e tamanho e com os "mesmos" elementos do vetor A, ou seja, B[i] = A[i].

tipo e tamanho e com os mesmos elementos do vetor A, ou seja, B[i] = A[i]. INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA SUL-RIO- GRANDENSE CAMPUS SAPUCAIA DO SUL PROFESSOR: RICARDO LUIS DOS SANTOS EXERCÍCIO DE REVISÃO E FIXAÇÃO DE CONTEÚDO - ARRAYS 1. Criar um vetor A

Leia mais

1. Introdução... 3. 2. Principais pontos de impacto da certificação... 3. 3. Entrada na Aplicação... 4. 3.1. Aplicação Não certificada...

1. Introdução... 3. 2. Principais pontos de impacto da certificação... 3. 3. Entrada na Aplicação... 4. 3.1. Aplicação Não certificada... 1. Introdução... 3 2. Principais pontos de impacto da certificação... 3 3. Entrada na Aplicação... 4 3.1. Aplicação Não certificada... 4 3.2. Aplicação Certificada... 5 3.3. Devoluções a Fornecedores e

Leia mais

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (5)

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (5) 1 Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (5) DECOM/UFOP 2012/2 5º. Período Anderson Almeida Ferreira Adaptado do material de Andréa Iabrudi Tavares BCC241/2012-2 3 Algoritmos Gulosos

Leia mais

Compiladores - Análise LL(1)

Compiladores - Análise LL(1) Compiladores - Análise LL(1) Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Gramáticas LL(1) Uma gramática é LL(1) se toda predição pode ser feita examinando um único token à frente Muitas

Leia mais

CIC 110 Análise e Projeto de Algoritmos I

CIC 110 Análise e Projeto de Algoritmos I CIC 110 Análise e Projeto de Algoritmos I Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá Algoritmos Gulosos AULA 06 Algoritmos Gulosos Um algoritmo guloso constrói uma solução para

Leia mais

Análise de algoritmos

Análise de algoritmos Análise de algoritmos Recorrências Conteúdo Introdução O método mestre Referências Introdução O tempo de execução de um algoritmo recursivo pode frequentemente ser descrito por uma equação de recorrência.

Leia mais

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches CT-234 Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural Carlos Alberto Alonso Sanches CT-234 2) Algoritmos recursivos Indução matemática, recursão, recorrências Indução matemática Uma

Leia mais

Carlos de Salles Soares Neto [email protected] Segundas e Quartas, 17h40 às 19h10

Carlos de Salles Soares Neto csalles@deinf.ufma.br Segundas e Quartas, 17h40 às 19h10 Algoritmos I Variáveis, Entrada e Saída de Dados Carlos de Salles Soares Neto [email protected] Segundas e Quartas, 17h40 às 19h10 Variáveis Área de memória para o armazenamento de dados Variáveis

Leia mais

Árvores. ! utilizada em muitas aplicações. ! modela uma hierarquia entre elementos. ! O conceito de árvores está diretamente ligado à recursão

Árvores. ! utilizada em muitas aplicações. ! modela uma hierarquia entre elementos. ! O conceito de árvores está diretamente ligado à recursão Árvores 1 Árvores! utilizada em muitas aplicações! modela uma hierarquia entre elementos! árvore genealógica! diagrama hierárquico de uma organização! modelagem de algoritmos! O conceito de árvores está

Leia mais

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches CES-11 Algoritmos e Estruturas de Dados Carlos Alberto Alonso Sanches Juliana de Melo Bezerra Ideia de Tarjan (1972) Durante a exploração em profundidade de um digrafo, podemos numerar seus vértices de

Leia mais

USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio

USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS Bruno Maffeo Departamento de Informática PUC-Rio MÉTODO INDUTIVO O método indutivo para resolver problemas aqui empregado inspira-se na formulação mais

Leia mais

Documento Auxiliar do Conhecimento de Transporte Eletrônico

Documento Auxiliar do Conhecimento de Transporte Eletrônico Documento Auxiliar do Conhecimento de Transporte Eletrônico 8338 Documento Auxiliar do Conhecimento de Transporte Eletrônico 8339 Documento Auxiliar do Conhecimento de Transporte Eletrônico 8340 Documento

Leia mais

n Programação Dinâmica n Exemplo: Sequência de Fibonnaci n Problemas de Otimização n Multiplicação de Matrizes n Principios de Programação Dinâmica

n Programação Dinâmica n Exemplo: Sequência de Fibonnaci n Problemas de Otimização n Multiplicação de Matrizes n Principios de Programação Dinâmica Proeto e Análise e Algoritmos Altigran Soares a Silva Universiae Feeral o Amazonas Departamento e Ciência a Computação Roteiro Exemplo: Sequência e Fibonnaci Problemas e Otimização Multiplicação e Matrizes

Leia mais

Oficina de Python Prof. Me. José Carlos Perini

Oficina de Python Prof. Me. José Carlos Perini Oficina de Python Prof. Me. José Carlos Perini Prof. José Carlos Perini Formação em Análise de Sistemas Univ. S. Francisco Pós em Administração Universidade S. Francisco Mestrado em Ciência da Computação

Leia mais

CAL ( ) MIEIC/FEUP Estruturas de Dados ( )

CAL ( ) MIEIC/FEUP Estruturas de Dados ( ) Conjuntos Disjuntos R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes FEUP, MIEIC, CPAL, 2010/2011 1 Conjuntos Disjuntos Objectivo resolver eficientemente o problema da equivalência estrutura

Leia mais

Complexidade de Algoritmos

Complexidade de Algoritmos Complexidade de Algoritmos! Uma característica importante de qualquer algoritmo é seu tempo de execução! é possível determiná-lo através de métodos empíricos, considerando-se entradas diversas! é também

Leia mais

Eduardo Camponogara. DAS-9003: Introdução a Algoritmos

Eduardo Camponogara. DAS-9003: Introdução a Algoritmos Caminhos Mínimos entre Todos os Vértices 1/ 48 Caminhos Mínimos entre Todos os Vértices Eduardo Camponogara Departamento de Automação e Sistemas Universidade Federal de Santa Catarina DAS-9003: Introdução

Leia mais

Oficina de Introdução de Programação usando Linguagem Python Prof. Ms. Perini

Oficina de Introdução de Programação usando Linguagem Python Prof. Ms. Perini Oficina de Introdução de Programação usando Linguagem Python Prof. Ms. Perini Apresentação do Professor Professor: José Carlos Perini E-mail: [email protected] Blog: http://profperini.com Formação

Leia mais