Programação Dinámica Análise de algoritmos UNISUL

Slides:



Advertisements
Apresentações semelhantes
Aquiles Burlamaqui AULA 09
Advertisements

AULA 02 PROGRAMAÇÃO LINEAR INTEIRA
AULA 01 PROGRAMAÇÃO DINÂMICA
Python: Recursão Claudio Esperança.
Programação em Java Prof. Maurício Braga
Inteligência Artificial
Celso C. Ribeiro Caroline T. Rocha
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 06: Funções.
Solved Exercises 1. Finding the Peak. Let A= a1,…,an be a sequence of n numbers with the following property: there is p in {1,…,n} for which (i) the.
Problemas de fluxo numa rede
FOLHA DE CÁLCULO 4.
Engenharia de Computação.
Inteligência Artificial I
Árvore Binária de Busca
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.
Geometria Computacional Interseção de Segmentos
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
Recursividade Conceitos e Aplicações.
Classificação e Pesquisa de Dados
Dividir-e-Conquistar
Capítulo 3 - Russell e Norvig
Recorrências.
RECURSIVIDADE Análise de algoritmos UNISUL Ciência da Computação
Divisão e Conquista Análise de algoritmos UNISUL Ciência da Computação
Inteligência Artificial
Análise Semântica e Representação Intermédia
Algoritmos de Busca Parte II
Informática Teórica Engenharia da Computação
Introdução à Programação
Funcionamento básico de um computador
Compressão de Textos Juliano Palmieri Lage.
Resolução de problemas por meio de busca
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
ORDENAÇÃO POR CONTAGEM
Busca com informação e exploração
Aula T06 – BCC202 Análise de Algoritmos (Parte 4) Túlio Toffolo
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Subset Sum Algoritmos e Estruturas de Dados – IF672
Introdução e Busca Cega
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Abordagens para problemas NP-completos
Mergesort Katia Guimarães.
Algoritmos Crescimento de Funções
Campus de Caraguatatuba Aula 12: Sistemas de Equações Lineares (2)
Algoritmos e Estruturas de Dados I – Recursão
1 A COMPUTAÇÃO MODERNA Valdemar W. Setzer Depto. de Ciência da Computação da USP
Algoritmos e Estruturas de Dados I – Recursão
Campus de Caraguatatuba Licenciatura em Matemática Semestre de 2013
Busca sem Informação Álvaro Vinícius “Degas”
Universidade do Vale do Rio dos Sinos - São Leopoldo -
BCC /01 Aula Teórica 09 Funções Material Didático Proposto. 1 BCC701 – Programação de Computadores I Universidade Federal de Ouro Preto Departamento.
Algoritmos e Estruturas de Dados RECURSIVIDADE. O que é recursividade? Recursividade significa algo ser definido em termos de sí próprio. Em termos de.
INTRODUÇÃO À PROGRAMAÇÃO EM LÓGICA Profa. Joseluce de Farias Cunha
Como analisar um algoritmo
Programação Dinâmica.
Recursividade Profs. De Prog2 e Lab2.
Alinhamento de Cadeias de DNA COMPARAÇÃO DE SEQÜÊNCIAS
Analise de Algoritmos e Notação Assintótica
Análise e Síntese de Algoritmos
ATAL – Prof. Jorge Figueiredo Ordenação AT AL Análise e Técnicas de Algoritmos Análise de Algoritmos de Ordenação.
Professor Luiz José Hoffmann Filho
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.
Ordenação (Sorting) Ordenar é dispor os elementos de um conjunto numa ordem ascendente ou descendente. Problema: Dados n números, arranjá-los em ordem.
Recursividade e análise Cristiano Arbex Valle Vinicius Fernandes dos Santos
UNIVERSIDADE FEDERAL DE MINAS GERAIS Exercícios de Revisão 1 Crisitano Arbex Valle Vinicius Fernandes dos Santos
Transcrição da apresentação:

Programação Dinámica Análise de algoritmos UNISUL Ciência da Computação Prof. Maria Inés Castiñeira, Dra.

Exemplo: Fibonacci Números de Fibonacci Entrada:Um número inteiro n. Saída:O número de Fibonacci Fn, definido da seguinte forma: F0 = 0, F1= 1, Fn= Fn-1+ Fn-2 para n ≥2 232

Fibonacci recursivo Solução clásica recursiva: Fib(n) if n ≤1 then return n else return Fib(n – 1) + Fib(n - 2) 235

Análise de Fibonacci • Análise através da resolução de uma relação de recorrência: – T(n) = T(n – 1) + T(n – 2) + c – O(2^n) • Solução ineficiente. Qual o motivo da ineficiência? 236

Solução para Fibonacci Árvore espaço das soluçoes para Fibonacci 237

Solução ineficiente Cálculos repetidos!

Solução Fibonacci alternativa • Solução alternativa: – Utilizar um array f[0, ..., n] para guardar os valores calculados. – Inicialmente, f contém apenas símbolos especiais ∞. Fib1(n) if f[n] ≠ ∞ then return f[n] if n ≤ 1 then return f[n] ←n return f[n] ← Fib1(n – 1) + Fib1(n - 2)

Fibonacci f1 F5 F3 F4 % % % % % %

Fibonacci f1 F5 F4 F3 F3 F2 % % % % % %

Fibonacci f1 F5 F4 F3 F3 F2 F2 F1 % % % % % %

Fibonacci f1 F5 F4 F3 F3 F2 F2 F1 F1 F0 % % % % % %

Fibonacci f1 F5 F4 F3 F3 F2 F2 F1 F1 F0 1 % % % %

Fibonacci f1 F5 F4 F3 F3 F2 F1 F2 F1 F0 1 1 % % %

Fibonacci f1 F5 F4 F3 F3 F2 F1 F2 F1 F0 1 1 % % %

Fibonacci f1 F5 F4 F3 F3 F2 F1 F2 F1 F0 1 1 2 % %

Fibonacci f2 Uma outra solução alternativa: – Eliminar as chamadas recursivas. – Utilizar o array para armazenar dados calculados. – Estratégia bottom-up. Fib2(n) f[0] ←0 f[1] ←1 For i ←2 to n do f[i] ←f[i – 1] + f[i - 2] return f[n]

Comparando soluções Podemos identificar que Fib2 é O(n). Fib1 é também O(n). Ainda usa recursão. Abordagem utilizada: – Encontrar função recursiva apropriada. – Adicionar memorização para armazenar resultados de subproblemas. – Determinar uma versão bottom-up, iterativa

Programação dinâmica Fib2 é PROGRAMAÇÃO DINÂMICA!!!!! Programação dinâmica = resolver bottom-up, usar estrutura auxiliar (tabela ou array) para guardar valores intermediários

Programação Dinámica Quando a soma dos tamanhos dos subproblemas é O(n) então é provável que o algoritmo recursivo tenha complexidade polinomial. Quando a divisão de um problema de tamanho n resulta em n subproblemas de tamanho n-1 então é provável que o algoritmo recursivo tenha complexidade exponencial. .

Programação Dinámica Nesse caso, a técnica de programação dinâmica pode levar a um algoritmo mais eficiente. A programação dinâmica calcula a solução para todos os subproblemas, partindo dos subproblemas menores para os maiores, armazenando os resultados em uma tabela. A vantagem é que uma vez que um subproblema é resolvido , a resposta é armazenada em uma tabela e nunca mais é recalculado .

Programação dinâmica Aplicado quando recursão produz repetição dos mesmos subproblemas. Proposta: reusar computação. PD = DC + tabela. Versão bottom-up é mais compacta e fácil de efetuar análise. Estratégia utilizada em problemas de otimização.

Quando aplicar Prog. Dinâmica? Aplicar em problemas que, em princípio, parece requerer muito tempo para ser resolvido (em geral é de ordem exponencial). Principais características: Princípio da Otimalidade (subproblemas ótimos): o valor ótimo global pode ser definido em termos dos valores ótimos dos subproblemas. Overlap de Subproblemas:os subproblemas não são independentes. Existe um overlap entre eles (logo, devem ser construídos bottom-up). 273

Bibliografia Cormen, Leiserson e Rivest, ALGORITMOS: teoria e prática. Rio de Janeiro: Campus, 2002. FIGUEREDO, Jorge. Material didático de Técnicas e análise de algoritmos. UFCG. Disponível em www.dsc.ufcg.edu.br/~abrantes/