CAL ( ) - MIEIC/FEUP Programação Dinâmica ( )

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

Download "CAL ( ) - MIEIC/FEUP Programação Dinâmica ( )"

Transcrição

1 AL (-) - MIEI/FEUP Programação Dinâmica (--4) Técnicas de oncepção de Algoritmos (ª parte): programação dinâmica R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes AL, MIEI, FEUP Fevereiro de Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de Programação dinâmica (dynamic programming) Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de Técnicas de oncepção de Algoritmos./rr()

2 AL (-) - MIEI/FEUP Programação Dinâmica (--4) Aplicabilidade e abordagem Problemas resolúveis recursivamente (solução é uma combinação de soluções de subproblemas similares) Mas em que a resolução recursiva directa duplicaria trabalho (resolução repetida do mesmo subproblema) Abordagem: º) Economizar tempo (evitar repetir trabalho), memorizando as soluções parciais dos sub-problemas (gastando memória!) º) Economizar memória, resolvendo sub-problemas por ordem que minimiza nº de soluções parciais a memorizar (bottom-up, começando pelos casos base) Termo Programação vem da Investigação Operacional, no sentido de formular restrições ao problema que tornam um método aplicável Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de Exemplo: n k, versão recursiva 4 int comb(int n, int k) { if (k == k == n) return ; else return comb(n-, k) + comb(n-, k-); } Executa n k - vezes (nº de somas a efectuar é nº de parcelas -) Executa n k vezes (nº de s / parcelas que é preciso somar ) Executa n k - vezes para calcular n k!! Pode-se melhorar muito, evitando repetição de trabalho (cálculos intermédios i j ) Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de Técnicas de oncepção de Algoritmos./rr()

3 AL (-) - MIEI/FEUP Programação Dinâmica (--4) n k repetição de trabalho 5 5 = nós/chamadas! 8 chamadas duplicadas! Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de n k - Programação dinâmica 6 Memorização de soluções parciais: n k k= k= K= K= K=4 k=5 n= n= n= i n= j n= n=5 5 5 Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de Técnicas de oncepção de Algoritmos./rr()

4 AL (-) - MIEI/FEUP Programação Dinâmica (--4) Implementação Guardar apenas uma coluna, e calcular da esq. para dir. (também se podia guardar linha e calc. cima p/ baixo): static final int MAXN = 5; static int c[] = new int[maxn+]; T(n,k) = O(k(n-k)) int comb(int n, int k) { S(n,k) = O(n-k) int maxj = n - k; for (int j = ; j <= maxj; j++) c[j] = ; n-k+ vezes for (int i = ; i <= k; i++) for (int j = ; j <= maxj; j++) k(n-k) vezes c[j] += c[j-]; return c[maxj]; } Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de 7 Problema da mochila 8 Um ladrão encontra o cofre cheio de itens de vários tamanhos e valores, mas tem apenas uma mochila de capacidade limitada; qual a combinação de itens que deve levar para maximizar o valor do roubo? Tamanhos e capacidades inteiros Vamos assumir nº ilimitado de itens de cada tipo Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de Técnicas de oncepção de Algoritmos./rr(4)

5 AL (-) - MIEI/FEUP Programação Dinâmica (--4) Exemplo 9 Itens Tamanho apacidade da mochila: 7 Valor 4 Nome A 5 B D E Uma solução óptima: 7 7 Outra solução óptima: A D E Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de Estratégia de prog. dinâmica alcular a melhor combinação para todas as mochilas de capacidade até M (capacidade pretendida) omeçar por considerar que só se pode usar o item, depois os itens e, etc., e finalmente todos os itens de a N (N = nº de itens) álculo é eficiente em tempo e espaço se efectuado pela ordem apropriada Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de Técnicas de oncepção de Algoritmos./rr(5)

6 AL (-) - MIEI/FEUP Programação Dinâmica (--4) Dados Entradas: N nº de itens (com nº de cópias ilimitado de cada item) size[i] ( i N) tamanho (inteiro) do item i val[i] ( i N) valor do item i M capacidade da mochila (inteiro) Dados de trabalho, no final de cada iteração i (de a N) cost[k] ( k M) melhor valor que se consegue com mochila de capacidade k, usando apenas itens de a i best[k] ( k M) último item seleccionado p/ obter melhor valor com mochila de capac. k, usando apenas itens de a i Dados de saída: cost[m] melhor valor que se consegue c/ mochila de cap. M best[m], best[m-size[best[m]], size[best[m]], etc. itens seleccionados Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de Formulação recursiva aso base (i = ; k =,, M): cost[ k] best[ k] () () = = aso recursivo (i =,, N; k =,, M) : ( cost[ k] ( best[ k] i) i) size[ i] k ( i) val[ i] + cost[ k -size[ i]], se = ( i) ( val[ i] + cost[ k -size[ i]] > cost[ k] ( i ) cost[ k], no caso contrário i, no primeiro caso acima (usa o item i) = ( i ) best[ k], no segundo caso acima (não usa o item i) Encher o resto i ) Permite usar repetidamente o item i (senão, escrevíamos i-) Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de Técnicas de oncepção de Algoritmos./rr(6)

7 AL (-) - MIEI/FEUP Programação Dinâmica (--4) odificação Tempo: T(N,M) = O(NM) Espaço: S(N,M) = O(M) int[] cost = new int[m+]; // iniciado c/ s int[] best = new int[m+]; // iniciado c/ s for (int i = ; i <= N; i++ ) for (int k = size[i]; k <= M; k++) if (val[i] + cost[k-size[i]] > cost[k]) { cost[k] = val[i] + cost[k-size[i]]; best[k] = i; omo k é percorrido por ordem crescente } cost[k-size[i]] já tem o valor da iteração i // impressão de resultados (valor e itens) print(cost[m]); for (int k = M; k > ; k -= size[best[k]]) print(best[k]); Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de *Evolução dos dados de trabalho 4 i size val k cost[k] best[k] 4 cost[k] best[k] 4 5 cost[k] best[k] 7 cost[k] best[k] 4 8 cost[k] best[k] cost[k] best[k] Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de Técnicas de oncepção de Algoritmos./rr(7)

8 AL (-) - MIEI/FEUP Programação Dinâmica (--4) * Subsequência crescente mais comprida 5 Exemplo: Sequência S = (9, 5,, 8, 7,,, 6, 4) Subsequência crescente mais comprida (elem s não necessariamente contíguos): (,, 4) ou (,, 6) Formulação: s,, s n - sequência l i compr. da maior subseq. crescente de (s,, s i ) p i predecessor de s i nessa subsequência crescente l i = + max { l k < k < i s k < s i } (max{ } = ) p i = valor de k escolhido para o máx. na expr. de l i omprimento final: max(l i ) Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de * álculo para o exemplo dado 6 i Sequência si Tamanho li Predecessor pi Resposta: (,, 6) Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de Técnicas de oncepção de Algoritmos./rr(8)

9 AL (-) - MIEI/FEUP Programação Dinâmica (--4) * Números de Fibonacci 7 Formulação recursiva: F() = F() = F(n) = F(n-) + F(n-), n > Para calcular F(n), basta memorizar os dois últimos elementos da sequência para calcular o seguinte: int Fib(int n) { int a =, b = ; // F(-), F() for (int i=; i <= n; i++) {int t = a; a = b; b += t; } return b; } Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de Referências 8 Mark Allen Weiss. Data Structures & Algorithm Analysis in Java. Addison-Wesley, 999 Steven S. Skiena. The Algorithm Design Manual. Springer 998 Robert Sedgewick. Algorithms in ++. Addison-Wesley, 99 Slides de Maria ristina Ribeiro Técnicas de oncepção de Algoritmos, AL MIEI/FEUP, Fev. de Técnicas de oncepção de Algoritmos./rr(9)

Divisão-e-Conquista ( ) CAL ( ) MIEIC/FEUP. ./rr (1) Técnicas de Concepção de Algoritmos

Divisão-e-Conquista ( ) CAL ( ) MIEIC/FEUP. ./rr (1) Técnicas de Concepção de Algoritmos 1 Técnicas de Concepção de Algoritmos (1ª parte): divisão e conquista R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes CAL, MIEIC, FEUP Fevereiro de 2011 2 Divisão e Conquista (divide and

Leia mais

CAL ( ) MIEIC/FEUP Técnicas de Concepção de Algoritmos, CAL MIEIC/FEUP, Fev. de Técnicas de Concepção de Algoritmos. .

CAL ( ) MIEIC/FEUP Técnicas de Concepção de Algoritmos, CAL MIEIC/FEUP, Fev. de Técnicas de Concepção de Algoritmos. . 1 Técnicas de Concepção de Algoritmos (1ª parte): algoritmos gananciosos R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes CAL, MIEIC, FEUP Fevereiro de 2011 2 Algoritmos gananciosos (greedy

Leia mais

Desafios de Programação

Desafios de Programação Desafios de Programação 2018.1 Programação Dinâmica É um método de projeto de algoritmos que utiliza a memorização para melhorar a eficiência de um algoritmo. Método parecido com o de divisão e conquista

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

Técnicas de Desenho de Algoritmos

Técnicas de Desenho de Algoritmos Técnicas de Desenho de Algoritmos Mudança de ênfase: da implementação de algoritmos para o desenho de algoritmos A ver: 5 tipos de algoritmos abordagem ao problema exemplos complexidade em tempo e espaço

Leia mais

Técnicas de Desenho de Algoritmos

Técnicas de Desenho de Algoritmos Técnicas de Desenho de Algoritmos Mudança de ênfase: da implementação de algoritmos para o desenho de algoritmos A ver: 5 tipos de algoritmos abordagem ao problema exemplos complexidade em tempo e espaço

Leia mais

Técnicas de Desenho de Algoritmos

Técnicas de Desenho de Algoritmos Técnicas de Desenho de Algoritmos Mudança de ênfase: da implementação de algoritmos para o desenho de algoritmos A ver: 5 tipos de algoritmos abordagem ao problema exemplos complexidade em tempo e espaço

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

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

O termo Programação Dinâmica é um bocado infeliz.

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

Leia mais

Programação Dinâmica. Prof. Anderson Almeida Ferreira

Programação Dinâmica. Prof. Anderson Almeida Ferreira Programação Dinâmica Prof. Anderson Almeida Ferreira Programação Dinâmica 1950, Bellman Evitar recálculos dos subproblemas em comum Menor para maior (bottom-up) Tabelas ou memorização É uma técnica de

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

Algoritmos em Strings

Algoritmos em Strings Algoritmos em Strings R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes FEUP, MIEIC, CAL, 2010/2011 1 Índice Pesquisa exacta (string matching) Pesquisa aproximada (approximate string matching)

Leia mais

Backtracking( ) CAL ( ) MIEIC/FEUP. ./rr(1) Técnicas de Concepção de Algoritmos

Backtracking( ) CAL ( ) MIEIC/FEUP. ./rr(1) Técnicas de Concepção de Algoritmos CAL (1-11) MIEIC/FEUP Backtracking(11--) 1 Técnicas de Concepção de Algoritmos (1ª parte): algoritmos de retrocesso R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes CAL, MIEIC, FEUP Fevereiro

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 05 Técnicas de Projeto de Algoritmos (Programação Dinâmica) Edirlei Soares de Lima Estratégias de Projeto de Algoritmos Força Bruta (Brute Force)

Leia mais

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006)

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006) 5. Análise de Complexidade de Algoritmos João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006) FEUP - MIEEC Prog 2-2006/2007 Introdução Algoritmo: conjunto

Leia mais

Recursividade. Prof. Jesus José de Oliveira Neto

Recursividade. Prof. Jesus José de Oliveira Neto Recursividade Prof. Jesus José de Oliveira Neto Algoritmos podem ser definidos de duas formas: Forma iterativa ou não recursiva: utiliza laços de repetição (while, for, do/while) Forma recursiva: métodos

Leia mais

Análise de Complexidade de Algoritmos

Análise de Complexidade de Algoritmos Análise de Complexidade de Algoritmos Algoritmos e Estruturas de Dados 2009/2010 Introdução Algoritmo: conjunto claramente especificado de instruções a seguir para resolver um problema Análise de algoritmos:

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

Técnicas de projeto de algoritmos: Indução

Técnicas de projeto de algoritmos: Indução Técnicas de projeto de algoritmos: Indução ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 08/2008

Leia mais

Algoritmos e Estruturas de Dados I Linguagem C

Algoritmos e Estruturas de Dados I Linguagem C Algoritmos e Estruturas de Dados I (DCC/003) Algoritmos e Estruturas de Dados I Linguagem C Aula Tópico 11 Recursividade 1 Recursão Na linguagem C, uma função pode chamar outra função. A função main()

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

Programação Dinâmica. Aplicação directa - Fibonacci

Programação Dinâmica. Aplicação directa - Fibonacci Programação Dinâmica Divisão e conquista: problema é partido em subproblemas que se resolvem separadamente; solução obtida por combinação das soluções Programação dinâmica: resolvem-se os problemas de

Leia mais

BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I BCC202 - Estrutura de Dados I Aula 13: Ordenação: MergeSort Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Website: www.decom.ufop.br/reifortes Email: reifortes@iceb.ufop.br

Leia mais

3. Vectores: Algoritmos de Pesquisa. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2004/2005) Luís Paulo Reis (versão 2005/2006)

3. Vectores: Algoritmos de Pesquisa. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2004/2005) Luís Paulo Reis (versão 2005/2006) 3. Vectores: Algoritmos de Pesquisa João Pascoal Faria (versão original) Ana Paula Rocha (versão 2004/2005) Luís Paulo Reis (versão 2005/2006) FEUP - MIEEC Prog2-2006/2007 Introdução Algoritmo: conjunto

Leia mais

Complexidade de Algoritmos

Complexidade de Algoritmos Complexidade de Algoritmos Prof. Diego Buchinger diego.buchinger@outlook.com diego.buchinger@udesc.br Prof. Cristiano Damiani Vasconcellos cristiano.vasconcellos@udesc.br Abordagens para Resolução de Problemas

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 02 Técnicas de Projeto de Algoritmos (Força Bruta) Edirlei Soares de Lima Tipos Importantes de Problemas Problemas de Ordenação: Reorganizar

Leia mais

a) Defina uma função para obter o máximo entre dois números

a) Defina uma função para obter o máximo entre dois números IP, Resoluções comentadas, Semana 2 jrg, vs 002, Out-2012 a) Defina uma função para obter o máximo entre dois números A versão mais imediata talvez seja esta: public static int maior ( int a, int b ) {

Leia mais

CAL ( ) MIEIC/FEUP Grafos: Introdução (Março, 2011)

CAL ( ) MIEIC/FEUP Grafos: Introdução (Março, 2011) 1 Algoritmos em Grafos: Introdução R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes CAL, MIEIC, FEUP Março de 2011 Índice 2 Revisão de conceitos e definições Exemplificar aplicações Representação

Leia mais

Programação I Aula 16 Mais exemplos de recursão

Programação I Aula 16 Mais exemplos de recursão Programação I Aula 16 Mais exemplos de recursão Pedro Vasconcelos DCC/FCUP 2018 Pedro Vasconcelos (DCC/FCUP) Programação I Aula 16 Mais exemplos de recursão 2018 1 / 27 Nesta aula 1 Desenhar árvores 2

Leia mais

Fundamentos de programação

Fundamentos de programação Fundamentos de programação Recursividade Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno O que é recursividade? Técnica baseada em divisão e conquista Buscar solucionar o problema dividindo

Leia mais

SCC-601 Introdução à Ciência da Computação II. Ordenação e Complexidade Parte 3. Lucas Antiqueira

SCC-601 Introdução à Ciência da Computação II. Ordenação e Complexidade Parte 3. Lucas Antiqueira SCC-60 Introdução à Ciência da Computação II Ordenação e Complexidade Parte 3 Lucas Antiqueira Ordenação: Utiliza uma estrutura de dados chamada heap para ordenar. Um heap é um vetor (array) que representa

Leia mais

Programação Estruturada

Programação Estruturada Programação Estruturada Recursão Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Recursão Recursão 1 Recursão 2

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

Recursividade. Objetivos do módulo. O que é recursividade

Recursividade. Objetivos do módulo. O que é recursividade Recursividade Objetivos do módulo Discutir o conceito de recursividade Mostrar exemplos de situações onde recursividade é importante Discutir a diferença entre recursividade e iteração O que é recursividade

Leia mais

AULA 15. Algoritmos p.600/637

AULA 15. Algoritmos p.600/637 AULA 15 Algoritmos p.600/637 Programação dinâmica CLRS 15.1 15.3 = recursão com tabela = transformação inteligente de recursão em iteração Algoritmos p.601/637 Programação dinâmica "Dynamic programming

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

Recursão David Déharbe

Recursão David Déharbe Recursão David Déharbe 1 1 Objetivos da aula O conceito de recursão. Exemplos. Programação em C. 2 2 Roteiro da aula Revisão de funções; Motivação; Definição; Dois exemplos básicos; Recursão mútua; Dois

Leia mais

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros: Fontes Bibliográficas Estruturas de Dados Aula 15: Árvores Livros: Introdução a Estruturas de Dados (Celes, Cerqueira e Rangel): Capítulo 13; Projeto de Algoritmos (Nivio Ziviani): Capítulo 5; Estruturas

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

Introdução à Programação

Introdução à Programação Introdução à Programação 1.Ano LCC-MIERSI DCC - FCUP Nelma Moreira Aula 12 Recursividade Recursão versus Iteração FACTORIAL outra vez! Muitas versões. n! = n (n - 1)... 1 int facti(int n){ int fac=n; while(--n>0){

Leia mais

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: funções Prof. Renato Pimentel 1 Subprogramas Subprograma: programa que auxilia o programa principal na realização de uma determinada

Leia mais

Algoritmos e Estruturas de Dados II LEIC

Algoritmos e Estruturas de Dados II LEIC Algoritmos e Estruturas de Dados II Licenciatura em Engenharia Informática e Computação www.fe.up.pt/ rcamacho/cadeiras/aed2 LIACC/FEUP Universidade do Porto rcamacho@fe.up.pt Fevereiro 2005 Conteúdo da

Leia mais

AULA TEÓRICA 10. Tema 9. Interface. Tema 10. Recursividade

AULA TEÓRICA 10. Tema 9. Interface. Tema 10. Recursividade AULA TEÓRICA 10 Tema 9. Interface Tema 10. Recursividade 1 Interface Uma interface é como uma classe que não pode ser instanciada. Seu objectivo é espicificar um conjunto de métodos que uma classe deverá

Leia mais

Estrututas de Dados e Algoritmos. Estrutura de Dados e Algoritmos

Estrututas de Dados e Algoritmos. Estrutura de Dados e Algoritmos Estruturas de Dados e Algoritmos Algoritmos conceitos básicos Algoritmo: Sequência de passos simples, claramente especificada, para resolver um determinado problema. Uma receita. Problemas e Algoritmos

Leia mais

Programação dinâmica. CLRS cap 15. = recursão com tabela = transformação inteligente de recursão em iteração

Programação dinâmica. CLRS cap 15. = recursão com tabela = transformação inteligente de recursão em iteração Programação dinâmica CLRS cap 15 = recursão com tabela = transformação inteligente de recursão em iteração Números de Fibonacci F 0 = 0 F 1 = 1 F n = F n 1 +F n 2 n 0 1 2 3 4 5 6 7 8 9 F n 0 1 1 2 3 5

Leia mais

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof. Listas Estáticas SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de

Leia mais

Técnicas de análise de algoritmos

Técnicas de análise de algoritmos CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS Técnicas de análise de algoritmos Algoritmos e Estruturas de Dados I Natália Batista https://sites.google.com/site/nataliacefetmg/ nataliabatista@decom.cefetmg.br

Leia mais

Técnicas de Concepção de Algoritmos: Branch and Bound

Técnicas de Concepção de Algoritmos: Branch and Bound Técnicas de Concepção de Algoritmos: R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes FEUP, MIEIC, CAL, 2010/2011 1 O que é? BB ou B&B é uma técnica de concepção de algoritmos genérica para

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

ALGORITMOS E ESTRUTURAS DE DADOS 2011/2012 ANÁLISE DE ALGORITMOS. Armanda Rodrigues 3 de Outubro 2011

ALGORITMOS E ESTRUTURAS DE DADOS 2011/2012 ANÁLISE DE ALGORITMOS. Armanda Rodrigues 3 de Outubro 2011 ALGORITMOS E ESTRUTURAS DE DADOS 2011/2012 ANÁLISE DE ALGORITMOS Armanda Rodrigues 3 de Outubro 2011 2 Análise de Algoritmos Temos até agora analisado soluções de problemas de forma intuitiva A análise

Leia mais

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014 Filas de prioridade Marcelo K. Albertini de Novembro de / Filas de prioridade O que é uma fila de prioridade? Estrutura de dados que generaliza a ideia de ordenação. Coleções de elementos: inserir e remover

Leia mais

Conceitos Básicos de C

Conceitos Básicos de C Conceitos Básicos de C Bibliografia Problem Solving & Program design in C, Jeri R. Hanly e Elliot B. Kpffman, 3 a edição Data Structures and Algorithm Analysis in C, Mark Allen Weiss, 2 a edição, Addison-Wesley,

Leia mais

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 Árvores Estrutura de Dados Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 2 Árvore Binária de Busca Definição: uma árvore binária de busca (ABB) é uma árvore binária na qual

Leia mais

Prof. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35

Prof. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35 INE5603 Introdução à POO Prof. A. G. Silva 25 de setembro de 2017 Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de 2017 1 / 35 Baseado em materiais da Recursividade Unisinos, Cesar Tacla (UTFPR),

Leia mais

Estruturas de Dados Aula 14: Recursão

Estruturas de Dados Aula 14: Recursão Estruturas de Dados Aula 14: Recursão Fontes Bibliográficas Livros: Projeto de Algoritmos (Nivio Ziviani): Capítulo 2; Estruturas de Dados e seus Algoritmos (Szwarefiter, et. al): Capítulo 1; Algorithms

Leia mais

Algoritmos e Estruturas de Dados I 01/2013. Vetores e Recursividade. Pedro O.S. Vaz de Melo

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

Leia mais

Algoritmos e Estruturas de Dados II

Algoritmos e Estruturas de Dados II Algoritmos e Estruturas de Dados II Grafos VI: Grafos Ponderados & Caminhos Mínimos (Bellman-Ford) Ricardo J. G. B. Campello Parte deste material é baseado em adaptações e extensões de slides disponíveis

Leia mais

Estruturas de Dados Aula 14: Recursão 19/05/2011

Estruturas de Dados Aula 14: Recursão 19/05/2011 Estruturas de Dados Aula 14: Recursão 19/05/2011 Fontes Bibliográficas Livros: Projeto de Algoritmos (Nivio Ziviani): Capítulo 2; Estruturas de Dados e seus Algoritmos (Szwarefiter, et. al): Capítulo 1;

Leia mais

Prova 1 PMR2300 / PMR3201 1o. semestre 2015 Prof. Thiago Martins

Prova 1 PMR2300 / PMR3201 1o. semestre 2015 Prof. Thiago Martins Prova 1 PMR2300 / PMR3201 1o. semestre 2015 Prof. Thiago Martins Instruções: Escreva o nome e o número USP na folha de papel almaço. Indique na linha seguinte quatro das cinco questões abaixo que devem

Leia mais

Algoritmos e Estruturas de Dados

Algoritmos e Estruturas de Dados Algoritmos e Estruturas de Dados Prof. Yandre Maldonado - 1 RECURSIVIDADE Prof. Yandre Maldonado e Gomes da Costa Prof. Yandre Maldonado - 2 Um objeto é dito recursivo se ele consistir parcialmente ou

Leia mais

INF 1010 Estruturas de Dados Avançadas. Árvores binárias

INF 1010 Estruturas de Dados Avançadas. Árvores binárias INF 1010 Estruturas de Dados Avançadas Árvores binárias 1 Árvore estrutura hierárquica: A B E F C D G A B C E F D G A B C D E F G (A (B (E, F)), C, (D (G))) 05/09/16 2 Árvore - definições árvore: nó raiz

Leia mais

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1 INF1007: Programação 2 6 Ordenação de Vetores 01/10/2015 (c) Dept. Informática - PUC-Rio 1 Tópicos Introdução Ordenação bolha (bubble sort) Ordenação por seleção (selection sort) 01/10/2015 (c) Dept. Informática

Leia mais

Análise da Complexidade de Algoritmos

Análise da Complexidade de Algoritmos Análise da Complexidade de Algoritmos (revisões) Algoritmos e Estruturas de Dados II Licenciatura em Engenharia Informática e Computação www.fe.up.pt/ rcamacho/cadeiras/aed2 LIACC/FEUP Universidade do

Leia mais

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

Ordenação: QuickSort. Prof. Túlio Toffolo  BCC202 Aula 15 Algoritmos e Estruturas de Dados I Ordenação: QuickSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 15 Algoritmos e Estruturas de Dados I QuickSort Proposto por Hoare em 1960 e publicado em 1962. É o algoritmo de ordenação

Leia mais

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação CP41F Aula 2 Prof. Daniel Cavalcanti Jeronymo Conceito de algoritmo. Raciocínio lógico na construção de algoritmos. Estrutura de algoritmos. Universidade Tecnológica Federal

Leia mais

UNIVERSIDADE LUSÍADA DE LISBOA. Programa da Unidade Curricular INTRODUÇÃO AOS ALGORITMOS E ESTRUTURAS DE DADOS Ano Lectivo 2016/2017

UNIVERSIDADE LUSÍADA DE LISBOA. Programa da Unidade Curricular INTRODUÇÃO AOS ALGORITMOS E ESTRUTURAS DE DADOS Ano Lectivo 2016/2017 Programa da Unidade Curricular INTRODUÇÃO AOS ALGORITMOS E ESTRUTURAS DE DADOS Ano Lectivo 2016/2017 1. Unidade Orgânica Ciências da Economia e da Empresa (1º Ciclo) 2. Curso Engenharia Informática 3.

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 04 Técnicas de Projeto de Algoritmos (Método Guloso) Edirlei Soares de Lima Estratégias de Projeto de Algoritmos Força Bruta (Brute Force) Dividir

Leia mais

INSTRUÇÕES DE REPETIÇÃO

INSTRUÇÕES DE REPETIÇÃO Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 6 INSTRUÇÕES DE REPETIÇÃO As instruções de repetição permitem fazer com que a execução de uma

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

UNIVERSIDADE LUSÍADA DE LISBOA. Programa da Unidade Curricular INTRODUÇÃO AOS ALGORITMOS E ESTRUTURAS DE DADOS Ano Lectivo 2014/2015

UNIVERSIDADE LUSÍADA DE LISBOA. Programa da Unidade Curricular INTRODUÇÃO AOS ALGORITMOS E ESTRUTURAS DE DADOS Ano Lectivo 2014/2015 Programa da Unidade Curricular INTRODUÇÃO AOS ALGORITMOS E ESTRUTURAS DE DADOS Ano Lectivo 2014/2015 1. Unidade Orgânica Ciências da Economia e da Empresa (1º Ciclo) 2. Curso Engenharia Informática 3.

Leia mais

Algoritmos e Estrutura de Dados. Aula 01 Apresentação da Disciplina e Introdução aos Algoritmos Prof. Tiago A. E. Ferreira

Algoritmos e Estrutura de Dados. Aula 01 Apresentação da Disciplina e Introdução aos Algoritmos Prof. Tiago A. E. Ferreira Algoritmos e Estrutura de Dados Aula 01 Apresentação da Disciplina e Introdução aos Algoritmos Prof. Tiago A. E. Ferreira Ementa e Objetivos Ementa: Análise de Algoritmos: Notação O e Análise Assintótica.

Leia mais

Prova de Recuperação PMR3201/PMR2300 1o. semestre 2015 Prof. Thiago Martins

Prova de Recuperação PMR3201/PMR2300 1o. semestre 2015 Prof. Thiago Martins Prova de Recuperação PMR21/PMR2 1o. semestre 2 Prof. Thiago Martins Instruções: screva o nome e o número USP na folha de papel almaço. 1. (2 pontos) Uma pilha é uma estrutura de dados na qual o elemento

Leia mais

Listas Estáticas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Listas Estáticas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista Listas Estáticas SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de

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

Ordenação: MergeSort. Prof. Túlio Toffolo BCC202 Aula 14 Algoritmos e Estruturas de Dados I

Ordenação: MergeSort. Prof. Túlio Toffolo  BCC202 Aula 14 Algoritmos e Estruturas de Dados I Ordenação: MergeSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 14 Algoritmos e Estruturas de Dados I DIVISÃO E CONQUISTA Motivação É preciso revolver um problema com uma entrada grande

Leia mais

Recursividade. Métodos iterativos. Prof. Cesar Augusto Tacla. Métodos iterativos utilizam estruturas de repetição

Recursividade. Métodos iterativos. Prof. Cesar Augusto Tacla. Métodos iterativos utilizam estruturas de repetição Recursividade Prof. Cesar Augusto Tacla Métodos iterativos Métodos iterativos utilizam estruturas de repetição For While Do while Normalmente, um método invoca outros métodos, não a si mesmo. 2 1 Recursividade

Leia mais

Introdução à Programação em C

Introdução à Programação em C Introdução à Programação em C Funções Resumo Aula Anterior Tabelas Strings (Tabelas de Caracteres) 2 1 Resumo Funções Definição Protótipo e implementação return e void Passagem por valor Exemplos 3 Funções

Leia mais

Estruturas de Repetição

Estruturas de Repetição Estruturas de Repetição Disciplina: Algoritmos e Programação Luciano Moraes Da Luz Brum Universidade Federal do Pampa Unipampa Campus Bagé Email: lucianobrum18@gmail.com Horários de atendimento: (outros

Leia mais

Recursão. Aula 1. Liana Duenha. Faculdade de Computação Universidade Federal de Mato Grosso do Sul

Recursão. Aula 1. Liana Duenha. Faculdade de Computação Universidade Federal de Mato Grosso do Sul Recursão Aula 1 Liana Duenha Faculdade de Computação Universidade Federal de Mato Grosso do Sul Algoritmos e Programação II, Análise de Sistemas, 2010 Martinez & Rubert (FACOM) Recursão APIIAS 1 / 25 Conteúdo

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

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

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich Árvores Binárias SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista. Figuras editadas por Isadora Maria Mendes http://www.icmc.usp.br/~paulovic

Leia mais

04 Recursão SCC201/501 - Introdução à Ciência de Computação II

04 Recursão SCC201/501 - Introdução à Ciência de Computação II 04 Recursão SCC201/501 - Introdução à Ciência de Computação II Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2010/2 Moacir Ponti Jr. (ICMCUSP) 04Recursão

Leia mais

controle de fluxo repetições iterativas

controle de fluxo repetições iterativas Controle de Fluxo Repetições iterativas INF1005 Programação I Prof. Hélio Lopes lopes@inf.puc-rio.br sala 408 RDC 1 controle de fluxo repetições iterativas tópicos while for do while break continue referência

Leia mais

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição 1 Comando while Deseja-se calcular o valor de: 1 + 2 + 3 +... + N. Observação: não sabemos, a priori, quantos termos

Leia mais

6. Pesquisa e Ordenação

6. Pesquisa e Ordenação 6. Pesquisa e Ordenação Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 6. Pesquisa e Ordenação Estruturas de Dados 1 / 30 Pesquisa de Informação A pesquisa eficiente de informação

Leia mais

Aula 10 Comandos de Repetição

Aula 10 Comandos de Repetição Aula 10 Comandos de Repetição Algoritmos e Programação de Computadores Profs: Ronaldo Castro de Oliveira ronaldo.co@ufu.br Anilton Joaquim da Silva anilton@ufu.br 1 Introdução Em certas situações é necessária

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

5COP088. Aula 2 Linguagem Estruturada Prof. Dr. Sylvio Barbon Junior. Laboratório de Programação. Aula 2 Linguagem Estruturada

5COP088. Aula 2 Linguagem Estruturada Prof. Dr. Sylvio Barbon Junior. Laboratório de Programação. Aula 2 Linguagem Estruturada 5COP088 Laboratório de Programação Aula 2 Linguagem Estruturada Prof. Dr. Sylvio Barbon Junior 1 Sumário 1) Exercícios - Laços 2) Ponteiros 3) Funções 4) Procedimentos 5) Recursividade 2 Exercícios sobre

Leia mais

Programação Estruturada Prof. Rodrigo Hausen Condicionais e Laços

Programação Estruturada Prof. Rodrigo Hausen  Condicionais e Laços Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Condicionais e Laços 1 RELEMBRANDO - AULA PASSADA Definindo Funções tipo de retorno (saída) tipo nomefuncao(tipo par1, tipo par2)

Leia mais

Programação científica C++

Programação científica C++ Programação científica C++ NIELSEN CASTELO DAMASCENO Slide 8 Matrizes como argumento de funções O nome de uma matriz (sem os colchetes) representa o endereço onde a matriz está armazenada. Ao passar o

Leia mais

ALGORITMOS I. Procedimentos e Funções

ALGORITMOS I. Procedimentos e Funções Procedimentos e Funções Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 1 MÓDULOS São blocos de instruções que realizam tarefas específicas. Carregado uma vez e pode ser executado quantas vezes

Leia mais