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

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

Algoritmos Gulosos. Norton T. Roman

Algoritmos gulosos (greedy)

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (DPV 5; CLRS 4)

Programação Dinâmica. Prof. Marcio Delamaro ICMC/USP

Projeto e Análise de Algoritmos

Alguns comentários. Segunda prova. Programação dinâmica em grafos. Guloso em grafos. Algoritmos p. 1

Algoritmos gulosos (greedy)

Algoritmos gulosos (greedy) CLRS Cap 16 e KT Cap 4

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

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

Coloração de intervalos

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

Aula 13: Branch-and-bound

Algoritmos de aproximação - Problema da Mochila

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

Desafios de Programação

Otimização Combinatória - Parte 4

Algoritmos Greedy. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/ / 40

Algoritmos para Automação e Sistemas. Programação Dinâmica. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

AULA 17. Algoritmos p.662/695

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

Programação dinâmica

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

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

PROGRAMAÇÃO DINÂMICA

Análise de algoritmos. Sílvia Mara da Costa Campos Victer

Otimização discreta Modelagem com variáveis binárias: problemas clássicos

Complexidade de Algoritmos. Edson Prestes

Pesquisa Operacional / Programação Matemática

Abordagens para Resolução de Problemas

Estruturas de Dados 2

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

Escalonamento em uma máquina

Complexidade de Algoritmos

AULA 15. Algoritmos p.600/637

Aula 20: Revisão Otimização Linear e Inteira Túlio A. M. Toffolo

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

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

Branch and Bound - Ramicar e Limitar

ANÁLISE DE ALGORITMOS

Algoritmos de Caminho Mínimo Parte 1

Análise de Algoritmos

Referências e materiais complementares desse tópico

RESOLUÇÃO DCC-UFRJ MATEMÁTICA COMBINATÓRIA 2006/2 PROVA Considere a soma. S n = n 2 n 1

Algoritmos em Grafos - Aula 07 Algoritmos Gulosos

EQUAÇÕES RELACIONAIS FUZZY E COMO RESOLVÊ-LAS

Algoritmos de ordenação Quicksort

Projeto e Análise de Algoritmos

Análise de Algoritmos

Capítulo 2. Conjuntos Infinitos. 2.1 Existem diferentes tipos de infinito

Luís Fernando Schultz Xavier da Silveira. 12 de maio de 2010

Árvore Binária de Busca Ótima

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

Otimização em Grafos

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

Teoria dos Conjuntos. (Aula 6) Ruy de Queiroz. O Teorema da. (Aula 6) Ruy J. G. B. de Queiroz. Centro de Informática, UFPE

Comparação com Divisão e Conquista

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

Análise e Complexidade de Algoritmos

Análise de algoritmos

Aula 19: Lifting e matrizes ideais

Teoria dos Grafos Aula 14

Algoritmos de aproximação - Problema de cobertura por conjuntos

Enumerabilidade. Capítulo 6

Lista de Exercícios 6: Soluções Funções

Classes, Herança e Interfaces

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

Busca em Regiões Ortogonais

Capítulo 2. Conjuntos Infinitos. 2.1 Existem diferentes tipos de infinito

Algoritmos Combinatórios: Backtracking

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

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

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

Axiomas de corpo ordenado

Quinta-feira, 11 de abril

Caminhos mínimos de todos os pares

Melhores momentos AULA 24. Algoritmos p.906/953

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

Análise e Síntese 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

Poliedros na forma padrão

Métodos Exatos para PI - Parte 1: Branch-and-Bound

Programação Dinâmica (incompleto!!!!!)

Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

LIMITES E CONTINUIDADE

Análise e Complexidade de Algoritmos

Exercícios de revisão para a primeira avaliação Gabaritos selecionados

3. Resolução de problemas por meio de busca

Otimização de horários Seminário. Clarisse Resende 25/01/2013

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO DEPARTAMENTO DE CIÊNCIAS DA COMPUTAÇÃO. 4 a Lista de Exercícios Gabarito de algumas questões.

Dedução Indução Contra-exemplos Contradição Contrapositiva Construção Diagonalização

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

Método Simplex. Marina Andretta ICMC-USP. 19 de outubro de 2016

Prof. Lorí Viali, Dr. PUCRS FAMAT: Departamento de Estatística. Curso: Engenharia de Produção

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

Teoria dos Grafos. Árvores

Transcrição:

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 semi-aberto i Supomos s[i] < f[i] Problema da seleção de atividades: Dada uma coleção de atividades, digamos S, dadas em intervalos, determinar um subconjunto sem sobreposição (compatíveis) máximo de atividades de S. Dois intervalos x e y são compatíveis se f[x] s[y] ou f[y] s[x] Simplificação: Dado um conjunto de atividades S, encontrar o tamanho de um subconjunto sem sobreposição máximo de S. Aula 14 p. 1 Aula 14 p. 3 Algoritmos Gulosos Problema de Otimização: Queremos computar uma solução que maximiza ou minimizar algum objetivo - A solução ótima Algoritmos Gulosos são eficientes em alguns problemas de otimização Fazem a escolha que parece melhor no momento São mais simples que o uso de programação dinâmica Problemas precisam ter característica gulosa Exemplo Conjunto de atividades i 1 2 3 4 5 6 7 8 9 10 11 s[i] 1 3 0 5 3 5 6 8 8 2 12 f[i] 4 5 6 7 8 9 10 11 12 13 14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Subconjunto de atividades mutuamente compatíveis máximo Aula 14 p. 2 Aula 14 p. 4

Exemplo Conjunto de atividades i 1 2 3 4 5 6 7 8 9 10 11 s[i] 1 3 0 5 3 5 6 8 8 2 12 f[i] 4 5 6 7 8 9 10 11 12 13 14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Substrutura Ótima Vamos acrescentar as atividades fictícias a 0 e a n+1 f[0] = 0 s[n + 1] = Problema todo S = S 0,n+1 Para facilitar, vamos supor que as atividades estão em ordem crescente de tempo de término: f[0] f[1] f[2] f[n] fn + 1 Como encontrar solução ótima a partir de Sij e assim para S 0,n+1 Uma subcoleção disjunta máxima:{a 1,a 4,a 8,a 11 } Aula 14 p. 4 Aula 14 p. 6 Substrutura Ótima Vamos formular uma solução com programação dinâmica para o problema Seja S ij = {a k S : f i s[k] < f[k] s[j]} Atividade a k que começa após a i terminar e termina antes de a j começar f[i] s[k] f[k] s[j] a i a k a j Atividades em S ij são compatíveis com a i e a j Atividades que não terminam depois de f[i] Atividades que não começam antes de s[j] Substrutura Ótima Afirmação Se i j então S i,j = se existir a k S ij f i s[k] < f[k] s[j] < f[j] f[i] < f[j] Mas i j f[i] f[j]. Contradição! Espaço de subproblemas S ij 0 i < j n + 1 Propriedade da substrutura ótima Suponha a que solução para S ij, A ij, inclua a k então temos a solução A ik e A kj A solução para S ij é A ik {a k } A kj Aula 14 p. 5 Aula 14 p. 7

Solução Recursiva Seja c[i,j] o tamanho de A ij c[i,j] = 0 para i j, pois S ij = Caso S ij e a k seja usada na solução ótima de S ij, então também usamos soluções ótimas para os subproblemas S ik e S kj Temos então a recorrência c[i,j] = c[i,k] + c[k,j] + 1 De fato há j i 1 possíveis valores para k. A saber, k = i + 1,,j 1, Recorrência completa { 0 se S ij = c[i,j] = max i k j {c[i,k] + c[k,j] + 1} se S ij Solução Gulosa Teorema Seja S ij não vazio e a m a atividade em S ij com término mais antigo: f[m] = min{f[k] : a k S ij }. Então 1. a m é usada em algum subconjunto de atividades compatíveis de tamanho máximo de S ij 2. S im =, tal que a escolha de a m deixa S mj como única escolha possivelmente não vazia Prova 2. (mais fácil) Suponha S im, então existe a k tal que f[i] s[k] < f[k] s[m] < f[m]. Assim, a k também está em S ij e termina antes de a m. Contradição. Concluímos que S im = Aula 14 p. 8 Aula 14 p. 10 Solução Gulosa Com a recorrência completa podemos de forma tabular escrever um algoritmo button-up que encontra o valor de uma solução para o problema Podemos também construir também a solução ótima propriamente dita Qual a complexidade deste algoritmo? Há duas observações que permitem simplificar a solução (no teorema a seguir) Com estas observações podemos escrever um algoritmo guloso mais eficiente Teorema 1. Seja A ij a solução para S ij. Considere A ij ordenada por tempo de término. Seja a k a primeira atividade de A ij. Se a k = a m, Feito! Se a k a m, construa o subconjunto A ij = A ij a k a m. As atividades em A ij são compatíveis, pois as em A ij elas eram compatíveis, a k é a primeira atividade em S ij a terminar e f[m] < f[k]. Veja que A ij = A ij. Portanto temos um conjunto de atividades compatíveis máximo contendo a m. Aula 14 p. 9 Aula 14 p. 11

Solução Gulosa Com programação dinâmica temos j i 1 escolhas para resolver S ij O Teorema reduz para apenas um subproblema (o de menor término) para resolver S ij forma top-down: Para resolver S ij, escolhemos a m e depois resolvemos S mj padrão dos subproblemas: Solução de S 0,n+1 é a m1 mais a solução para S m1,n+1, e assim por diante. padrão das escolhas: as atividades escolhidas desta forma possuem ordem crescente de término. Algoritmo Iterativo A conversão do algoritmo recursivo para um iterativo é Direto Novamente, consideramos a entrada ordenada por tempo de término Algoritmo GREDDY_SELECTOR(s, f, n) 1: A = {a 1 } 2:for m = 2 to ndo 3: if s[m] f[i]then 4: A = A {a m } 5: i = m Complexidade: tempo Θ(n) Aula 14 p. 12 Aula 14 p. 14 Algoritmo Recursivo A partir destas observações podemos escrever um algoritmo recursivo para o problema. Vamos considerar a entrada ordenada por tempo de término Algoritmo RECURSIVE_SELECTOR(s, f, i, n) 1: m = i + 1 2:while m nes[m] < f[i]do 3: m = m + 1 4:if m nthen 5: devolva {a m } RECURSIVE_SELECTOR(s,f,m, n) 6:else 7: devolva emptyset Chamada Inicial: RECURSIVE_SELECTOR(s, f, 0, n) Complexidade: tempo Θ(n) Estratégia Gulosa Em geral, temos os seguintes passos Modelar o problema de forma a ficarmos com apenas uma escolha e temos apenas um subproblema a resolver Provar que existe uma solução ótima que contenha a escolha gulosa, assim fazer esta escolha é sempre segura Mostrar que a escolha gulosa e a resolução do subproblema geram a solução ótima para o problema Ingredientes chaves de um algoritmo guloso subestrutura ótima característica gulosa: Solução ótima global pode ser produzida a partir de uma escolha ótima local. Aula 14 p. 13 Aula 14 p. 15

Método Guloso Prog. Dinâmica Ambos precisam de substruturas ótimas Programação Dinâmica Um passo de cada vez Escolhe dependem de soluções dos subproblemas: resolva os subproblemas primeiro Resolva de forma Button-up Algoritmo guloso Um passo de cada vez Faça a escolha antes de resolver os subproblemas Resolva de forma Top-Down Aula 14 p. 16 Problema da Mochila Ambos tem sub-estrutura ótima: (0-1) Se removermos j de uma solução ótima, a carga restante deve ser a de maior valor para carga máxima W w j tomando n 1 itens. O Problema da mochila fracionada tem solução gulosa e o Problema da mochila 0-1 não. 1 10 2 3 mochila $60 $100 $1 $2 50 Aula 14 p. 18 Problema da Mochila Problema clássico tem duas variações: Problema da mochila 0-1 Um ladrão rouba uma loja que contém n itens: o item i tem peso w i e vale v i, N. Ele quer levar o maior valor possível em uma mochila de carga máxima W. Quais itens escolher? Pense em ouro em barras Problema da mochila fracionada Mesmo formulação anterior, mas agora ele pode carregar frações dos itens, ao invés da escolha binária (0-1). Pense em ouro em pó Problama da Mochila Fracionada Para resolver o Problema da Mochila Fracionada ordene os itens por valor/peso v i /w i decrescentemente começando em i = 1 coloque na mochila o máximo do ítem i que estiver disponível e for possível e se puder levar mais passe para o próximo item. 1 10 2 3 50 mochila $60 $100 $1 $240 10 Aula 14 p. 17 Aula 14 p. 19

Problama da Mochila Fracionada Formulação Geral Seja S um conjunto de n itens cada um contendo v i : o valor do item i w i : o peso do item i Objetivo: Escolher itens com valor total máximo, de forma que o peso total não exceda W Podemos pegar frações de cada i Seja 0 x i 1 a quantidade escolhida do item i Maximizar x i v i Sujeito a restrição i S i S w i W Problema da Mochila Complexidade do MOCHILA_FRACIONADA O(n) O Problema da mochila 0-1 pode ser resolvido usando programação dinâmica em tempo O(nW). Algoritmo Pseudo-polinomial. Prove que o Problema da Mochila Fracionária tem a propriedade de escolha gulosa. O método guloso está associado a teoria dos matróides. Estas estruturas combinatórias buscam determinar quando o método produz soluções ótimas. Aula 14 p. Aula 14 p. 22 Problema da Mochila Fracionada Algoritmo MOCHILA_FRACIONADA Entrada: Conj. ordenado S de itens de valor v i e peso w i cada e capacidade máxima W Saída: x i de cada item i que maximiza o valor sem exceder W 1: load = 0 2: i = 1 3:while load < W e i ndo 4: if w i W loadthen 5: Pegue todo o item i 6: else 7: Pegue (W load)/w i do item i 8: Adicione a load o peso que foi pego 9: i = i + 1 Aula 14 p. 21