PCC104 - Projeto e Análise de Algoritmos
|
|
|
- Manoel Martini Godoi
- 8 Há anos
- Visualizações:
Transcrição
1 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 M. Carvalho (UFOP) PCC de agosto de / 45
2 Avisos Site da disciplina: Lista de s: Para solicitar acesso: Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
3 Na aula de hoje 1 Programação Dinâmica Parte II Exemplos Clássicos Problema da Mochila 0-1 Longest Increasing Subsequence Coin Change Maximum-Subarray Problem Max 2d Range Sum String Alignment Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
4 Avisos Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
5 O Problema da Mochila 0-1 Dadas uma mochila de capacidade W e uma lista de n itens distintos e únicos (enumerados de 0 a n 1), cada um com um peso w 0, w 1,..., w n 1 e um valor v 0, v 1,..., v n 1, maximizar o valor carregado na mochila, respeitando sua capacidade. Para cada item, devemos escolher se ele estará incluso na solução ou não. Exemplo W = 10, n = 4, w=[8, 1, 5, 4] e V =[500, 1000, 300, 210]; A resposta é 1510, selecionando os item 1, 2 e 3, com peso total 10. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
6 Recorrência da Busca Completa Consideramos dois parâmetros para caracterizar um estado/subproblema: o índice i do item atual e o peso remanescente W na mochila: mochila(i, 0) = 0; (Não cabe mais nada na mochila); mochila(n, W ) = 0; (Já analisamos todos os itens); se w i > W, o item i não cabe na mochila e deve ser ignorado, então, mochila(i, W) = mochila(i+1, W); se w i W, então podemos levar o item i ou não: mochila(i, W ) = max(mochila(i+1, W ), v i + mochila(i + 1, W w i ). Versão Top-Down Adicionamos à recorrência descrita uma tabela bidimensional que armazena o valor de uma solução para derivarmos a formulação por programação dinâmica top-down. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
7 Versão Top-Down Mochila(i, W ) Entrada: Índice i, Peso remanescente W se i = n ou W = 0 então retorna 0; se tabela[i][w ] 1 então retorna tabela[i][w ]; se w i > W então retorna tabela[i][w ] Mochila(i + 1, W ); retorna tabela[i][w ] max(mochila(i + 1, W ), v i + Mochila(i + 1, W w i ); Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
8 Versão Bottom-Up Mochila() //Aumentamos uma linha e um coluna dummies na tabela //A primeira linha e a primeira coluna da tabela são zeradas previamente para i 1 até n + 1 faça para j 1 até W + 1 faça se w i > j então tabela[i][j] tabela[i 1][j]; senão tabela[i][j] max(tabela[i 1][j], v i + tabela[i 1][j w i ]; retorna tabela[n][w ]; Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
9 Exercício Preencha a tabela abaixo com a execução dos algoritmos vistos. (i, w i ) / W (8, 500) (1, 1000) (5, 300) (4, 210) Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
10 Complexidade Apesar dos subproblemas repetidos, há apenas O(nW ) subproblemas distintos, uma vez que existem n itens e o peso pode variar entre 0 e W ; Podemos calcular a solução de cada problema em O(1) e, portanto, a complexidade da formulação por programação dinâmica é O(nW ). Bottom-Up vs. Top-Down Para este problema específico, claramente a versão Top-Down é mais rápida, uma vez que não preenche todas as entradas da tabela n W, ao contrário da versão Bottom-Up. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
11 Complexidade É importante salientar que o problema da mochila 0-1 é NP-Difícil, e este é um algoritmo pseudo-polinomial, ou seja, é polinomial no valor numérico da entrada, porém, exponencial no comprimento da codificação mesma; Especificamente, W não é polinomial em relação ao comprimento da sua codificação; Por exemplo, seja W = : são necessários 40 bits para representar este número, porém, o tempo de execução considera o fator , que é O(2 40 ), ou seja, O(2 logw ); Na verdade, a complexidade do algoritmo é O(N2 logw ), ou seja, exponencial; Por exemplo, em casos que nw >> 1M, mesmo a versão on-the-fly não é viável. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
12 Longest Increasing Subsequence Dada uma sequência {x 0, x 1,..., x n 1 }, é necessário determinar a maior subsequência crescente. Note que a subsequência não necessariamente é contígua. Exemplo N = 8 e a sequência {-7, 10, 9, 2, 3, 8, 8, 1}; A solução é {-7, 2, 3, 8} com comprimento 4. Solução Seja LIS(i) a maior subsequência crescente terminando no índice i (inicialmente, todas possuem valor 1), então temos: LIS(0) = 1; LIS(i) = max(lis(j) + 1), j [0..i 1] e x j < x i. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
13 Versão Bottom-Up LISBottomUp(X, n) Entrada: Vetor X, Inteiro n para i 1 até n faça ans 0; para j 0 até i faça se X[i] > X[j] e LIS[j] > ans então ans LIS[j]; LIS[i] ans + 1; ans 0; para i 0 até n faça se LIS[i] > ans então ans LIS[i] ; retorna ans; Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
14 Longest Increasing Subsequence As soluções para o problema podem ser reconstruídas seguindo as setas. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
15 Longest Increasing Subsequence Considerando N = 8 e a sequência {-7, 10, 9, 2, 3, 8, 8, 1}, temos: LIS(0) = 1, o próprio número -7; LIS(1) = 2, {-7, 10}; LIS(2) = 2, {-7, 10}. Podemos formar {-7, 9}, mas não {-7, 10, 9}, que não é crescente; LIS(3) = 2, {-7, 10} ou {-7, 9}. Podemos formar {-7, 2}, mas não {-7, 10, 2} ou {-7, 9, 2}, que não são crescentes; LIS(4) = 3, {-7, 2, 3}; LIS(5) = 4, {-7, 2, 3, 8}; LIS(6) = 4, {-7, 2, 3, 8}; LIS(7) = 2, {-7, 1}. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
16 Longest Increasing Subsequence A complexidade de tempo do algoritmo anterior é determinada pelos laços de repetição: O(n 2 ); Depois de preenchida a tabela, determinar o maior elemento é feito em tempo O(n); A complexidade de espaço é 2 n, ou O(n), dado que temos um vetor para a entrada e outro de mesmo tamanho para a tabela. Análise Longest Increasing Subsequence Claramente, há vários subproblemas sobrepostos ao determinarmos a maior subsequência crescente; Entretanto, há apenas N estados, ou seja, a maior subsequência crescente que termina no índice i (0 i n 1). Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
17 Coin Change Dada uma quantia V e uma lista de denominações de N moedas, qual é o número mínimo de moedas que devemos utilizar para obter a quantia V? Nota: Nesta versão do problema consideramos ter um suprimento infinito de moedas de qualquer denominação. Exemplo 1 V = 10, N = 2 e denominação = {1, 5}, podemos usar: Dez moedas de 1 centavo = 10 moedas; Uma moeda de 5 centavos + cinco moedas de 1 centavo = 6 moedas; Duas moedas de 5 centavos = 2 moedas. Lembrete Para algumas denominações de moedas podemos utilizar algoritmos gulosos com sucesso. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
18 Exemplo 2 V = 7, N = 4 e denominação = {1, 3, 4, 5}; A solução gulosa seria 3 (uma moeda de 5 centavos e duas moedas de 1 centavo); Entretanto a solução ótima é 2 (uma moeda de 3 centavos e uma moeda de 4 centavos). Solução Usamos a recorrência de busca completa: moeda(0) = 0; moeda(< 0) = ; moeda(valor) = 1 + min(moeda(valor denominação[i])) ( i [0..n 1]). A resposta é determinada por moeda(v ). Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
19 Coin Change Tabela para a formulação por programação dinâmica para o problema Coin Change. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
20 Coin Change Considerando V = 10, N = 2 e denominação = {1, 5}, temos: moeda(<0) = ; moeda(0) = 0, o caso base; moeda(1) = 1, obtido de 1 + moeda(1-1). moeda(1-5) é inviável; moeda(2) = 2, obtido de 1 + moeda(2-1). moeda(2-5) é inviável;. moeda(5) = 1, obtido de 1 + moeda(5-5), menor do que 1+moeda(5-1) = 5;. moeda(10) = 2, obtido de 1 + moeda(10-5), menor do que 1+moeda(10-1) = 6. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
21 Análise Coin Change Novamente, há vários subproblemas sobrepostos ao determinarmos o número mínimo de moedas; Entretanto, há apenas O(V ) estados, ou seja, V quantias possíveis; Como testamos O(N) moedas por estado, a complexidade geral é O(NV ). Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
22 Versão Top-Down CoinChange(V ) Entrada: Inteiro V se troco[v ] ou V < 0 então retorna troco[v ]; senão para i 0 até N faça troco[v ] min(troco[v ], 1+CoinChange(V D[i])); retorna troco[v ]; Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
23 Maximum-Subarray Problem, ou Max 1d Range Sum Dada uma vetor de n inteiros diferentes que zero, determine o intervalo de maior soma. Exemplo Consideremos a sequência -2, 1, -3, 4, -1, 2, 1, -5, 4. A subsequência contígua de números de soma máxima é 4, -1, 2, 1, cuja soma é 6. Observação Existem O(n 2 ) possibilidades de intervalos, porém, vimos um algoritmo de divisão e conquista com tempo O(n log n); Entretanto, o algoritmo de Kadane resolve este problema em tempo O(n). Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
24 Algoritmo de Kadane O princípio do algoritmo de Kadane é manter a soma dos elementos já analisados e reiniciar o valor em 0 caso a soma se torne negativa; Isto porque é melhor começar de zero do que continuar de uma soma ruim ; Embora possa também ser interpretado como um algoritmo guloso, este algoritmo possui características de programação dinâmica na medida em que a cada passo possui duas opções: incrementa a soma do intervalo anterior ou inicia um novo intervalo. Exercício Execute o algoritmo de Kadane para a entrada A=[4, -5, 4, -3, 4, 4, -4, 4, -5] e n = 9. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
25 KadaneOnTheFly(A, n) Entrada: Vetor A, Inteiro n soma 0; resp 0; para i 0 até n faça soma soma + A[i]; resp max(resp, soma); se soma < 0 então soma 0; retorna resp; Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
26 Max 2d Range Sum Dada uma matriz n n de inteiros, determine a submatriz de maior valor. Exemplo =15 Estratégia Ingênua Podemos tentar uma estratégia de busca completa, mostrada a seguir. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
27 MaximumSumN6(M, n) Entrada: Matriz M, inteiro n maxsubrect infty; para i 0 até n faça para j 0 até n faça para k i até n faça para l j até n faça subrect 0; para a i até k faça para b j até l faça subrect subrect + M[a][b]; maxsubrect max(maxsubrect, subrect); retorna maxsubrect; Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
28 Max 2d Range Sum Claramente, o algoritmo anterior possui complexidade Θ(n 6 ), e para uma matriz de dimensões 100 realizaria = (um trilhão) de operações; Existem várias soluções por Programação Dinâmica conhecidas para problemas de tamanhos estáticos como este; Para este problema, quando computamos uma submatriz maior, definitivamente estamos também computando submatrizes menores, ou seja, subproblemas sobrepostos; Uma possível solução por Programação Dinâmica é transformar a matriz entrada[n][n] em uma matriz soma[n][n] em que soma[i][j] não contém o valor de entrada[i][j], mas sim a soma de todos os elementos na submatriz delimitada pelos índices (0, 0) e (i, j); Podemos computar a segunda matriz no exato momento em que lemos a entrada, e a complexidade da operação se manterá Θ(n 2 ). Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
29 SubMatrixSum() Leia n; para i 0 até n faça para j 0 até n faça Leia o elemento soma[i][j]; //se possível, adiciona os valores do topo se i > 0 então soma[i][j] soma[i][j] + soma[i 1][j]; //se possível, adiciona os valores da esquerda se j > 0 então soma[i][j] soma[i][j] + soma[i][j 1]; //evita contagens duplicadas, princípio da inclusão-exclusão se i > 0 e j > 0 então soma[i][j] soma[i][j] soma[i 1][j 1]; Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
30 Max 2d Range Sum O procedimento SubMatrixSum transforma a matriz de entrada (à esquerda) na matriz de soma (à direita); Com esta estratégia, podemos determinar a soma de qualquer submatriz delimitada por (i, j) e (k, l) em O(1); Por exemplo, se quisermos determinar a soma da submatriz delimitada por (2, 3) e (4, 4) (elementos soma[1][2] e soma[3][3]) inclusive, podemos dividir a matriz original em 4 partes e calcular [???]. Exemplo Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
31 Max 2d Range Sum Apesar de podermos determinar a soma de uma submatriz específica em O(1), ainda falta determinar a maior soma de uma submatriz; O método apresentado a seguir, bottom-up, requer complexidade O(n 4 ), ou operações para uma matriz de dimensões 100; Entretanto, há uma maneira de resolver o problema em O(n 3 ), ou operações. Desafio Como alteramos a formulação por programação dinâmica para obtermos complexidade O(n 3 )? Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
32 MaximumSumN4(soma, n) Entrada: Matriz soma, inteiro n maxsubrect infty; para i 0 até n faça para j 0 até n faça para k i até n faça para l j até n faça subrect soma[k][l];//soma de (0,0) a (k, l): O(1) se i > 0 então subrect subrect soma[i 1][l];//O(1) se j > 0 então subrect subrect soma[k][j 1];//O(1) se i > 0 e j > 0 então subrect subrect + soma[i 1][j 1];//O(1) maxsubrect max(maxsubrect, subrect);//o(1) Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
33 Dúvidas? Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
34 Alinhamento de Strings O Problema de Alinhamento de Strings (ou Distância de Edição) nos pede que, dadas duas strings A e B, alinhe-as a com máxima pontuação de alinhamento (ou o mínimo de operações de edição); Após alinharmos A e B, existem 4 possibilidades para os caracteres A[i] e B[i] índice i: 1 Os caracteres A[i] e B[i] coincidem (pontuação +2): não fazemos nada; 2 Os caracteres A[i] e B[i] descoincidem (pontuação -1): substituímos A[i] por B[i]; 3 Inserimos um espaço em A[i] (pontuação -1); ou 4 Removemos o caractere em A[i] (pontuação -1). a O alinhamento é o processo de inserir espaços nas strings A ou B tal que elas tenham o mesmo número de caracteres. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
35 Exemplo A= ACAATCC A _ C A A T C C B= AGCATGC A G C A T G C _ Pontuação de alinhamento: = 4. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
36 Alinhamento de Strings: Needleman-Wunsch O algoritmo de Needleman-Wunsch é um famoso algoritmo de programação dinâmica bottom-up para resolver este problema; Consideremos duas strings A[1... n] e B[1... m]: Definimos V (i, j) como sendo a pontuação ótima do alinhamento entre A[1... i] e B[1... j]; Definimos que pontuação(a, b) é a pontuação do alinhamento dos caracteres a e b. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
37 Alinhamento de Strings Casos base: V (0,0) = 0 (não há pontuação para alinharmos duas strings vazias); V (i,0) = i pontuação(a[i], _), deletamos a string A[1..i] para realizar o alinhamento (i>0); V (0,j) = j pontuação(_, B[j]), inserimos espaços em B[1..j] para realizar o alinhamento (j>0). Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
38 Alinhamento de Strings Recorrências para i > 0 e j > 0: V (i, j) = max (opção1, opção2, opção3), em que: opção1 = V (i 1, j 1)+pontuação(A[i], B[j]) (coincidência ou não); opção2 = V (i 1, j)+pontuação(a[i], _) (remoção de A[i]); opção3 = V (i, j 1)+pontuação(_, B[j]) (inserção em B[j]). Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
39 Alinhamento de Strings Esta formulação se concentra nas três possibilidades para o último par de caracteres: uma coincidência/descoincidência, uma remoção ou uma inserção; Embora não saibamos qual é a melhor, podemos tentar todas as possibilidades e evitar a computação redundante de subproblemas. Exemplos xxx...xx xxx...xx xxx...x_ xxx...yy yyy...y_ yyy...yy Coincidência/descoincidência, remoção e inserção. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
40 Alinhamento de Strings Usando o exemplo de função de custo em que uma coincidência pontua +2, uma descoincidência, uma remoção e uma inserção pontuam -1, a figura a seguir demonstra a pontuação de alinhamento para A= ACAATCC e B= AGCATGC ; A pontuação de alinhamento é 7 (canto inferior direito). Seguindo as setas vermelhas, partindo do canto inferior direito podemos reconstruir a solução; As setas em diagonal representam uma coincidência ou uma descoincidência (por exemplo, o último C ); As setas verticais representam uma remoção (por exemplo,...cat.. para...c_t..); As setas horizontais representam uma inserção (por exemplo, A_C para AGC..). Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
41 Casos base para o alinhamento das strings A = ACAATCC e B = AGCATGC. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
42 Exemplo de alinhamento de strings para o alinhamento das strings A = ACAATCC e B = AGCATGC. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
43 Alinhamento com pontuação 7 ( = 7). A = A_CAAT[C]C B = AGC_AT[G]C Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
44 Alinhamento de Strings É necessário preencher todos os elementos da matriz n n; Cada elemento pode ser computado em O(1); A complexidade de tempo e de espaço é O(nm) exatamente o tamanho da tabela da Programação Dinâmica; A busca completa testaria todas as ( ) n+m m combinações; Apenas alterando o valor das pontuações, podemos resolver também o Longest Common Subsequence, um problema similar. Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
45 Dúvidas? Marco Antonio M. Carvalho (UFOP) PCC de agosto de / 45
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
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
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
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 1 de novembro de 2018 Marco Antonio
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
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
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
Otimização Combinatória - Parte 4
Graduação em Matemática Industrial Otimização Combinatória - Parte 4 Prof. Thiago Alves de Queiroz Departamento de Matemática - CAC/UFG 2/2014 Thiago Queiroz (DM) Parte 4 2/2014 1 / 33 Complexidade Computacional
ANÁLISE DE ALGORITMOS
ANÁLISE DE ALGORITMOS Paulo Feofiloff Instituto de Matemática e Estatística Universidade de São Paulo agosto 2009 Introdução P. Feofiloff (IME-USP) Análise de Algoritmos agosto 2009 2 / 102 Introdução
Algoritimos e Estruturas de Dados III CIC210
Algoritimos e Estruturas de Dados III CIC210 Divisão e Conquista Haroldo Gambini Santos Concurso Universidade Federal de Ouro Preto - UFOP 3 de setembro de 2009 Haroldo Gambini Santos Divisão e Conquista
Um sistema de numeração posicional utiliza um conjunto de símbolos. O valor que cada
APÊNDICE B Sistema de Numeração Posicional Um sistema de numeração posicional utiliza um conjunto de símbolos O valor que cada símbolo representa, no entanto, depende do seu valor nominal e do valor posicional,
Aula 10: Introdução a Vetores e Matrizes
Aula 10: Introdução a Vetores e Matrizes Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Vetores e Matrizes Programação de Computadores IV 1 / 50 Agenda
Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.
Teoria dos Grafos Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada [email protected], [email protected] Grafos e Algoritmos Preparado a partir do texto: Rangel, Socorro.
Tópicos Avançados em Algoritmos - exercícios de Prog. Din. com correcção parcial
Armando Matos, 2008/2009 Tópicos Avançados em Algoritmos - exercícios de Prog. Din. com correcção parcial 1. Optimizar o produto de matrizes Considere o problema da parentização óptima de uma multiplicação
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
BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1
BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 Na aula anterior Prova 2 Na aula de hoje Técnicas básicas de contagem; Tentativa e Erro; Recursividade.
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
Programação Dinâmica Partição de Inteiros
Notas de aula da disciplina IME -8 ALGORITMOS E ESTRUTURAS DE DADOS II Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) abril/9 Partição de Inteiros Dado n inteiro, determinar o número de maneiras
5ª Lista de Exercícios de Programação I
5ª Lista de Exercícios de Programação I Instrução As questões devem ser implementadas em C. Questões que envolvam leitura de matrizes, a construção dessas matrizes pode ser realizada através da geração
MATRIZES - PARTE Mais exemplos Multiplicação de duas matrizes AULA 26
AULA 26 MATRIZES - PARTE 2 26. Mais exemplos Nesta aula, veremos mais dois algoritmos envolvendo matrizes. O primeiro deles calcula a matriz resultante da multiplicação de duas matrizes e utiliza três
Recursividade, Tentativa e Erro
Recursividade, Tentativa e Erro Túlio Toffolo www.toffolo.com.br Marco Antônio Carvalho [email protected] BCC402 Aula 07 Algoritmos e Programação Avançada Na aula anterior Prova 2 Na aula de hoje Técnicas
Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010
Universidade Federal de Ouro Preto Instituto de Ciências Exatas e Biológicas Programa de Pós-Graduação em Ciência da Computação Projeto e Análise de Algoritmos - 1 o semestre de 2010 Professor: David Menotti
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]
BCC204 - Teoria dos Grafos
BCC204 - Teoria dos Grafos Marco Antonio M. Carvalho (baseado nas notas de aula do prof. Haroldo Gambini Santos) Departamento de Computação Instituto de Ciências Exatas e Biológicas Universidade Federal
Aula 20: Revisão Otimização Linear e Inteira Túlio A. M. Toffolo
Aula 20: Revisão Otimização Linear e Inteira Túlio A. M. Toffolo http://www.toffolo.com.br BCC464 / PCC174 Departamento de Computação - UFOP Breve Revisão Programação Linear vs Programação Inteira Modelagem
PUC-Rio Departamento de Informática Prof. Marcus Vinicius S. Poggi de Aragão Período: Horário: 4as-feiras de 13 às 16 horas - Sala 520L
PUC-Rio Departamento de Informática Prof. Marcus Vinicius S. Poggi de Aragão Período: 20047.1 Horário: 4as-feiras de 13 às 16 horas - Sala 520L PROJETO E ANÁLISE DE ALGORITMOS (INF 2926) Lista 1 1. Considere
Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.
Lista 1 8 de abril de 2013 1 Exercícios Básicos 1.1 Na bibliografia Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b. 1.2 Outros 1. Projete
INVESTIGANDO O PROBLEMA DA MOCHILA IRRESTRITA EM SUA VERSÃO BIDIMENSIONAL
INVESTIGANDO O PROBLEMA DA MOCHILA IRRESTRITA EM SUA VERSÃO BIDIMENSIONAL Mirella Augusta Sousa Moura, [email protected] Thiago Alves de Queiroz, th.al.qz@catalão.ufg.br Resumo: Empacotamento consiste
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
MATRIZES - PARTE Definição e Manipulação de Matrizes AULA 21
AULA 21 MATRIZES - PARTE 1 21.1 Definição e Manipulação de Matrizes Sabemos como definir variáveis de um novo tipo de dados, denominado vetor, que representam seqüências de valores de um mesmo tipo. Por
LINGUAGEM C: COMANDOS DE REPETIÇÃO
LINGUAGEM C: COMANDOS DE REPETIÇÃO Prof. André Backes ESTRUTURAS DE REPETIÇÃO Uma estrutura de repetição permite que uma sequência de comandos seja executada repetidamente, enquanto determinadas condições
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 5 de dezembro de 2017 Marco Antonio
Estruturas de Dados 2
Estruturas de Dados 2 Técnicas de Projeto de Algoritmos Dividir e Conquistar IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/83 Projeto de Algoritmos por Divisão
ESTRUTURAS DE REPETIÇÃO - PARTE 2
AULA 16 ESTRUTURAS DE REPETIÇÃO - PARTE 2 16.1 A seqüência de Fibonacci Um problema parecido, mas ligeiramente mais complicado do que o do cálculo do fatorial (veja as notas da Aula 14), é o do cálculo
Aula 7: Estrutura de Decisão
Aula 7: Estrutura de Decisão Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Estrutura de Decisão Programação de Computadores IV 1 / 27 Agenda 1 Revisão
Subsequência comum mais longa Em inglês, Longest Common Subsequence (LCS)
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,
Paradigmas de Projetos de Algoritmos
Paradigmas de Projetos de Algoritmos Luciana Assis 9 de junho de 2016 Luciana Assis (UFVJM) 9 de junho de 2016 1 / 36 1 Introdução 2 Força Bruta 3 Abordagem Incremental ou Construtiva 4 Recursão 5 Divisão
BCC204 - Teoria dos Grafos
BCC204 - Teoria dos Grafos Marco Antonio M. Carvalho (baseado nas notas de aula do prof. Haroldo Gambini Santos) Departamento de Computação Instituto de Ciências Exatas e Biológicas Universidade Federal
Algoritmos de Ordenação
Algoritmos de Ordenaçã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 [email protected] 10/2008 Material baseado em
Universidade de São Paulo
Universidade de São Paulo Instituto de Ciências Matemáticas e Computação SCE5763 - Tipos e Estrutura de Dados - Luis Gustavo Nonato 2 a Lista de Exercícios 1. Seja A um array de inteiros. Escreva algoritmos
Introdução Paradigmas
Introdução Paradigmas Recursividade Algoritmos tentativa e erro Divisão e conquista Programação dinâmica Algoritmos gulosos Algoritmos aproximados 1 Introdução O projeto de algoritmos requer abordagens
Lógica e Linguagem de Programação Aula 04 - Estruturas de Repetição Repetição com Teste no Final - Repita Até - GABARITO Professor: Danilo Giacobo
Lógica e Linguagem de Programação Aula 04 - Estruturas de Repetição Repetição com Teste no Final - Repita Até - GABARITO Professor: Danilo Giacobo Este guia irá lhe ajudar a entender o laço de repetição
Aula 10: Tratabilidade
Teoria da Computação DAINF-UTFPR Aula 10: Tratabilidade Prof. Ricardo Dutra da Silva Na aula anterior discutimos problemas que podem e que não podem ser computados. Nesta aula vamos considerar apenas problemas
ESTRUTURAS DE REPETIÇÃO - PARTE 1
AULA 15 ESTRUTURAS DE REPETIÇÃO - PARTE 1 15.1 O comando enquanto-faca- Considere o problema de escrever um algoritmo para ler um número inteiro positivo, n, e escrever todos os números inteiros de 1 a
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
BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1
BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 Avisos 2 Avisos Prova no dia 07 de Junho (em 11 dias). 3 Na aula anterior Backtracking. 4 Na
Árvore Binária de Busca Ótima
MAC 5710 - Estruturas de Dados - 2008 Referência bibliográfica Os slides sobre este assunto são parcialmente baseados nas seções sobre árvore binária de busca ótima do capítulo 4 do livro N. Wirth. Algorithms
ANÁLISE DE ALGORITMOS (INF 1721)
PUC-Rio Departamento de Informática Prof. Marcus Vinicius S. Poggi de Aragão (3WA) Lorenza Moreno e David Sotelo (3WB) Horário: 2as. e 4as. 15-17hs (3WA), 3as. e 5as. 19-21 (3WB) 5 de abril de 2010 Período:
Lista de Exercícios 07 Introdução à Ciência de Computação II (SCC0201/501)
Lista de Exercícios 07 Introdução à Ciência de Computação II (SCC0201/501) Prof. Moacir P. Ponti Jr. 24 de novembro de 2010 1 Hashing 1. Suponha uma tabela hash de tamanho 10 com endereçamento aberto para
Aula 15 - Estruturas de Repetição (p3)
BCC701- Programação de Computadores I Aula 15 - Estruturas de Repetição (p3) Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM http://www.decom.ufop.br/bcc701 BCC701-2019-01
Transformada de Discreta de Co senos DCT
Transformada de Discreta de Co senos DCT O primeiro passo, na maioria dos sistemas de compressão de imagens e vídeo, é identificar a presença de redundância espacial (semelhança entre um pixel e os pixels
Exercícios: Vetores e Matrizes
Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem C Exercícios: Vetores e Matrizes 1 Vetores 1. Faça um programa que possua um vetor
Aula 13: Branch-and-bound
Aula 13: Branch-and-bound Otimização Linear e Inteira Túlio A. M. Toffolo http://www.toffolo.com.br BCC464/PCC174 2018/2 Departamento de Computação UFOP Previously... Modelagem em PI / Problemas Combinatórios
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
O problema da subsequência comum máxima sem repetições
O problema da subsequência comum máxima sem repetições Carlos E. Ferreira 1, Christian Tjandraatmadja 1 1 Instituto de Matemática e Estatística, Universidade de São Paulo, Brasil Abstract. We study the
2 Casamento Inexato, Alinhamento de Sequências e Programação DRAFT
Biologia Computacional - 2004/2 09/11/04 Aula 1: Casamento Inexato, Alinhamento de Sequências e Programação Dinâmica Instrutor: Berilhes Borges Garcia Escriba: André C. M. Costa DRAFT 1 Pesquisando Banco
Linguagem C ESTRUTURA DE CONTROLE
ESTRUTURA DE CONTROLE REPETIÇÃO PARA / ENQUANTO Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 1 ESTRUTURA DE REPETIÇÃO - Utilizando PARA Na repetição uma sequência de comandos deve ser executada
Projeto e Análise de Algoritmos
Projeto e Análise de Algoritmos Aula 03 Técnicas de Projeto de Algoritmos (Divisão e Conquista) Edirlei Soares de Lima Estratégias de Projeto de Algoritmos Força Bruta (Brute Force)
Lógica e Linguagem de Programação Aula 04 - Estruturas de Repetição - GABARITO Repetição com Variável de Controle - Para Professor: Danilo Giacobo
Lógica e Linguagem de Programação Aula 04 - Estruturas de Repetição - GABARITO Repetição com Variável de Controle - Para Professor: Danilo Giacobo Este guia irá lhe ajudar a entender o laço de repetição
UNIVERSIDADE FEDERAL DO RIO DE JANEIRO DEPARTAMENTO DE CIÊNCIAS DA COMPUTAÇÃO. 4 a Lista de Exercícios Gabarito de algumas questões.
UNIVERSIDADE FEDERAL DO RIO DE JANEIRO DEPARTAMENTO DE CIÊNCIAS DA COMPUTAÇÃO MATEMÁTICA COMBINATÓRIA 4 a Lista de Exercícios Gabarito de algumas questões. Este gabarito foi feito direto no computador
Método Simplex dual. Marina Andretta ICMC-USP. 24 de outubro de 2016
Método Simplex dual Marina Andretta ICMC-USP 24 de outubro de 2016 Baseado no livro Introduction to Linear Optimization, de D. Bertsimas e J. N. Tsitsiklis. Marina Andretta (ICMC-USP) sme0211 - Otimização
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 7 de outubro de 2016 Marco Antonio
4 Casamento de Padrões
4 Casamento de Padrões O casamento de padrões é uma técnica que tem por objetivo localizar os elementos constituintes de uma seqüência em um conjunto de outras seqüências. Chamemos de padrão a seqüência
