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

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

Algoritmos Gulosos. Norton T. Roman

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

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

Fluxo Máximo. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Fluxo Máximo 2014/ / 28

Árvores de Suporte de Custo Mínimo

Teoria dos Grafos Aula 14

Tecnicas Essencias Greedy e Dynamic

Método Guloso. Troco mínimo. Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) junho/2012. Troco mínimo. Troco mínimo

Distâncias Mínimas. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Distâncias Mínimas 2014/ / 27

Grafos - Introdução. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Grafos - Introdução 2014/ / 32

Abordagens para Resolução de Problemas

Mercados de Emparelhamento

Teoria dos Grafos Aula 8

Matemática Discreta - 05

Análise e Síntese de Algoritmos

Simplex. Investigação Operacional José António Oliveira Simplex

Busca em Regiões Ortogonais

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

Pesquisa Operacional / Programação Matemática

MC102 Aula 26. Instituto de Computação Unicamp. 17 de Novembro de 2016

Otimização em Grafos

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Estruturas de Dados 2

BUSCA EM ARRAYS. Prof. André Backes. Ato de procurar por um elemento em um conjunto de dados

Pesquisa em Grafos. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2014/ / 33

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

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

Lógica Computacional Aula 4

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

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Teoria dos Grafos Aula 8

Algoritmos 3/17/ Algoritmos como área de estudo e investigação

método de solução aproximada

PROGRAMAÇÃO CONTRA CAPACIDADE INFINITA Carga versus Capacidade (CRP)

INF 1010 Estruturas de Dados Avançadas

Tabelas de Hash MBB. Novembro de Algoritmos e Complexidade LEI-LCC

SUB14 Campeonato de Resolução de Problemas de Matemática Edição 2008/2009

NOTAS DE AULA 1 METAHEURÍSTICA 13/10/2016

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Técnicas de Desenho de Algoritmos

Técnicas de Desenho de Algoritmos

ESTRUTURA DE DADOS E ALGORITMOS. Árvores Binárias de Busca. Cristina Boeres

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

Pedro Ribeiro 2014/2015

QuickTime and atiff (Uncompressed) decompressorare needed to see this picture. Programação Inteira. Métodos Quantitativos 2002/2003.

ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS

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

Exercícios: Alg Gulosos. Eduardo Laber

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

CIC 111 Análise e Projeto de Algoritmos II

Refinamentos sucessivos

Análise de Algoritmos

Teoria dos Grafos Aula 6

Análise Amortizada. Exemplo: Tabelas dinâmicas. Resulta da análise de uma sequência de operações numa estrutura de dados.

Dízimas e intervalos encaixados.

Introdução aos Algoritmos

Estruturas Discretas

Matemática para Ciência de Computadores

Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante).

Análise Amortizada. Fernando Lobo. Algoritmos e Estrutura de Dados II. Resulta da análise de uma sequência de operações numa estrutura de dados.

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

Algoritmos de ordenação Quicksort

CIC 111 Análise e Projeto de Algoritmos II

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

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

Aulas 5 e 6 / 28 e 30 de março

6. Pesquisa e Ordenação

A empresa em ambiente concorrencial

Investigação Operacional

Algoritmos gulosos (greedy)

AULA 17. Algoritmos p.662/695

Listas de Prioridade. Fonte de consulta: Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC.

Grafos: árvores geradoras mínimas. Graça Nunes

CI811 Tópicos em Algoritmos

Projeto e Análise de Algoritmos

Programação Estruturada

Lógica Computacional Aulas 8 e 9

Arranjos. Claudio Esperança Paulo Roma LCG/UFRJ. All rights reserved.

Comportamento Assintótico. Algoritmos e Estruturas de Dados Flavio Figueiredo (

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

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

Célia Borlido 07/09/2007 Encontro Nacional dos Novos Talentos em Matemática

ÁRVORE B. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Interval Trees, Priority Search Trees, Segment Trees. João Comba. Pesquisas intervalares sobre segmentos de reta

Gabriel Coutinho DCC035 - Pesquisa Operacional Lista 6

Projeto e Análise de Algoritmos

INSTITUTO SUPERIOR TÉCNICO Análise e Síntese de Algoritmos. RESOLUÇÃO DO 2 o TESTE

Criar um recurso para QIM com ActivInspire - Studio

1. Exemplo de uso do PROCV em planilha de Controle de Funcionários

Análise e Síntese de Algoritmos

Escola Secundária/2,3 da Sé-Lamego Ficha de Trabalho de Matemática A Ano Lectivo 2011/12 Distribuição de probabilidades 12.º Ano

Análise de complexidade

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

Análise e Síntese de Algoritmos. Problemas NP-Completos CLRS, Cap. 34

Teoria dos Grafos Aula 9

Complementos de Investigação Operacional. Folha nº 1 Programação Inteira 2006/07

Como Transferir Dados Entre Planilhas Diferentes

Transcrição:

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

Algoritmos Greedy Vamos falar de algoritmos greedy. Em português são conhecidos como: Algoritmos ávidos Algoritmos gananciosos Algoritmos gulosos Algoritmo Greedy Em cada passo escolher a melhor próxima escolha Nunca olhar para trás ou mudar decisões tomadas Nunca olhar para a frente para verificar se a nossa decisão tem consequências negativas. Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 2 / 40

Algoritmos Greedy Um primeiro exemplo O problema do troco (problema do cashier) Input: Um conjunto de valores de moedas S e uma quantia K a criar com as moedas Output: O menor número de moedas que fazem a quantia K (podemos repetir moedas) Exemplo de Input/Output Input: S = {1, 2, 5, 10, 20, 50, 100, 200} (temos infinitas moedas de cada tipo) K = 42 Output: 3 moedas (20 + 20 + 2) Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 3 / 40

O Problema do Troco Um algoritmo greedy Em cada passo escolher a maior moeda que não faz passar da quantia k Exemplos (com S = {1, 2, 5, 10, 20, 50, 100, 200}): K = 35 20 (total: 20) + 10 (total: 30) + 5 (total: 35)[3 moedas] K = 38 20 + 10 + 5 + 2 + 1 [5 moedas] K = 144 100 + 20 + 20 + 2 + 2 [5 moedas] K = 211 200 + 10 + 1 [3 moedas] Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 4 / 40

O Problema do Troco Este algoritmo resulta sempre no mínimo número de moedas? Para os sistemas de moedas comuns (ex: euro, dólar)... sim! Para um sistema de moedas qualquer... não! Exemplos: S = {1, 2, 5, 10, 20, 25}, K = 40 Greedy dá 3 moedas (25 + 10 + 5), mas é possível 2 moedas (20 + 20) S = {1, 5, 8, 10}, K = 13 Greedy dá 4 moedas (10 + 1 + 1 + 1), mas é possível 2 moedas (5 + 8) (Será que basta uma moeda seja maior que o dobro da anterior?) S = {1, 10, 25}, K = 40 Greedy dá 7 moedas (25 + 10 + 1 + 1 + 1 + 1 + 1), mas é possível 4 moedas (10 + 10 + 10 + 10) Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 5 / 40

Algoritmos Greedy Ideia simples, mas nem sempre funciona Dependendo do problema, pode dar resposta não ótima Normalmente a complexidade temporal é baixa (ex: linear ) O difícil é provar a otimalidade Tipicamente é aplicado em problemas de optimização Encontrar a melhor solução entre todas as soluções possíveis, segundo um determinado critério (função objectivo) Geralmente descobrir um máximo ou ou mínimo Uma passo de pré-processamento muito comum é... ordenar! Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 6 / 40

Propriedades para um algoritmos greedy funcionar Subestrutura Ótima Quando a solução óptima de um problema contém nela própria soluções óptimas para subproblemas do mesmo tipo Exemplo Seja min(k) o menor número de moedas para fazer a quantia k. Se essa solução usar uma moeda de valor v, então o resto das moedas é usar é precisamente min(k v). Se um problema apresenta esta característica, diz-se que respeita o princípio da optimalidade. Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 7 / 40

Propriedades para um algoritmos greedy funcionar Propriedade da Escolha Greedy Uma solução ótima é consistente com a escolha greedy que o algoritmo faz. Exemplo No caso das moedas de euro, não existe nenhuma solução ótima que não use a maior moeda menor ou igual à quantia a fazer. Provar esta propriedade é o mais complicado Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 8 / 40

Fractional Knapsack Problema da Mochila Fracionada (fractional knapsack) Input: Uma mochila com capacidade C Um conjunto de n materiais, cada um com peso w i e valor v i Output: A alocação de materiais para a mochila que maximize o valor transportado. Os materiais podem ser partidos em pedaços mais pequenas, ou seja, podemos decidir levar apenas quantidade x i do objecto i, com 0 x i 1. O que queremos é portanto respeitar o seguinte: Os materiais cabem na mochila ( i x i w i C) O valor da mochila é o maior possível (maximizar i x i v i ) Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 9 / 40

Fractional Knapsack Exemplo de Input Input: 5 objectos e C = 100 i 1 2 3 4 5 w i 10 20 30 40 50 v i 20 30 66 40 60 Qual é a resposta ótima neste caso? Escolher sempre o material de maior valor: i 1 2 3 4 5 x i 0 0 1 0.5 1 Isto daria um peso total de 100 e um valor total de 146. Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 10 / 40

Fractional Knapsack Exemplo de Input Input: 5 objectos e C = 100 i 1 2 3 4 5 w i 10 20 30 40 50 v i 20 30 66 40 60 Qual é a resposta ótima neste caso? Escolher sempre o material mais leve: i 1 2 3 4 5 x i 1 1 1 1 0 Isto daria um peso total de 100 e um valor total de 156. Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 11 / 40

Fractional Knapsack Exemplo de Input Input: 5 objectos e C = 100 i 1 2 3 4 5 w i 10 20 30 40 50 v i 20 30 66 40 60 Qual é a resposta ótima neste caso? Escolher sempre o material com maior rácio valor/peso: i 1 2 3 4 5 v i /w i 2 1.5 2.2 1.0 1.2 x i 1 1 1 0 0.8 Isto daria um peso total de 100 e um valor total de 164. Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 12 / 40

Fractional Knapsack Teorema Escolher sempre a maior quantidade possível do material com maior rácio valor/peso é uma estratégia que dá valor ótimo 1) Subestrutura Ótima Considere uma solução ótima e o seu material m com melhor rácio. Se o retirmos da mochila, então o restante tem de conter a solução ótima para os outros materiais que não m e para uma mochila de capacidade C w m. Caso assim não seja, então a solução inicial também não era ótima! Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 13 / 40

Fractional Knapsack Teorema Escolher sempre a maior quantidade possível do material com maior rácio valor/peso é uma estratégia que dá valor ótimo 2) Propriedade da Escolha Greedy Queremos provar que a máxima quantidade possível do material m com maior rácio (v i /w i ) deve ser incluida na mochila. O valor da mochila: valor = i x i v i. Seja q i = x i w i a quantidade de material i na mochila: valor = i q i v i /w i Se ainda temos material m disponível, então substituir um outro qualquer material i por m vai dar um melhor valor total: q i v m /w m q i v i /w i (por definição de m) Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 14 / 40

Fractional Knapsack Algoritmo greedy para Fractional Knapsack Ordenar materiais por ordem decrescente de rácio valor/peso Processar o próximo material na lista ordenada: Se o elemento couber na totalidade na mochila, incluir todo e continuar para o próximo material Se o elemento não coubar na totalidade na mochila, incluir o máximo possível e terminar Complexidade: Ordenar: O(n log n) Processar: O(n) Total: O(n log n) Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 15 / 40

Interval Scheduling Problema do Planeamento de Intervalos (interval scheduling) Input: Um conjunto de n actividades, cada uma com início no tempo s i e final no tempo f i. Output: Descobrir o maior subconjunto de actividades que não tenham sobreposições Dois intervalos i e j têm uma sobreposição se existe um tempo k no qual ambos estão activos. Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 16 / 40

Interval Scheduling Exemplo de Input Input: 5 actividades: i 1 2 3 4 5 s i 1 2 4 4 5 f i 7 5 6 9 10 Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 17 / 40

Interval Scheduling Padrão greedy: estabelecer uma ordem segundo um determinado critério e depois ir escolher actividades que não sejam sobrepostas com as já escolhidas Algumas possíveis ideias: [Início mais cedo] Alocar por ordem ascendente de s i [Final mais cedo] Alocar por ordem ascendente de f i [Intervalo mais pequeno] Alocar por ordem ascendente de f i s i [Menos conflitos] Alocar por ordem ascendente do número de outras actividades que estão sobrepostas Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 18 / 40

Interval Scheduling [Início mais cedo] Alocar por ordem ascendente de s i Contra-Exemplo: Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 19 / 40

Interval Scheduling [Intervalo mais pequeno] Alocar por ordem ascendente de f i s i Contra-Exemplo: Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 20 / 40

Interval Scheduling [Menos conflitos] Alocar por ordem ascendente do número de outras actividades que estão sobrepostas Contra-Exemplo: Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 21 / 40

Interval Scheduling [Final mais cedo] Alocar por ordem ascendente de f i Contra-Exemplo: Não existe! De facto esta estratégia greedy produz solução ótima! Teorema Escolher sempre a actividade não sobreposta com as já escolhidas que tenha o menor tempo de finalização produz uma solução ótima. 1) Subestrutura Ótima Considere uma solução ótima e actividade m com menor f m. Se retirarmos essa actividade então o restante tem de conter a solução ótima para as outras actividades que começam depois de f m. Caso assim não seja, então a solução inicial também não era ótima! Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 22 / 40

Interval Scheduling Teorema Escolher sempre a actividade não sobreposta com as já escolhidas que tenha o menor tempo de finalização produz uma solução ótima. 2) Propriedade da Escolha Greedy Vamos assumir que as actividades estão ordenadas por ordem crescente de tempo de finalização Seja G = {g 1, g 2,..., g m } a solução criada pelo algoritmo greedy. Vamos mostrar por indução que dada qualquer outra solução ótima H, podemos modificar as primeiras k actividades de H para corresponderem às primeiras k actividades de G, sem introduzirmos nenhuma sobreposição. Quando k = n, a solução H corresponde a G e logo G = H. Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 23 / 40

Interval Scheduling Caso base: k = 1 Seja outra solução ótima H = {h 1, h 2,..., h m } Temos de mostrar que g 1 podia substituir h 1 Por definição, temos que f g1 f h1 Sendo assim, g 1 podia ficar no lugar de h 1 sem criar nenhuma sobreposição Isto prova que g 1 pode ser o início de qualquer solução ótima! Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 24 / 40

Interval Scheduling Passo Indutivo (assumindo que é verdade até k) Assumimos que outra solução ótima H = {g 1,..., g k, h k+1,... h m } Temos de mostrar que g k+1 podia substituir h k+1 s gk+1 f gk (não existe sobreposição) Logo, f gk+1 f hk+1 (o algoritmo greedy escolhe desse modo) Sendo assim, g k+1 podia ficar no lugar de h k+1 sem criar nenhuma sobreposição Isto prova que g k+1 pode ser ser escolhido para extender a solução greedy! Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 25 / 40

Interval Scheduling Algoritmo greedy para Interval Scheduling Ordenar actividades por ordem crescente de tempo de finalização Começar por iniciar G = Ir adicionando a G a próxima actividade da lista (com menor f i, portanto) que não esteja sobreposta com nenhuma actividade de G Complexidade: Ordenar: O(n log n) Processar: O(n) Total: O(n log n) Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 26 / 40

Cobertura Mínima Problema da cobertura mínima Input: Um conjunto de n segmentos de linha com coordenadas não negativas [l i, r i ], e um número M. Output: Descobrir o menor quantidade possível de segmentos que cobrem o segmento [0, M]. Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 27 / 40

Cobertura Mínima Exemplo de Input Input: 5 segmentos, M=6 : i 1 2 3 4 5 l i 0 3 4 3 2 r i 2 4 6 8 4 Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 28 / 40

Cobertura Mínima Padrão greedy: estabelecer uma ordem segundo um determinado critério e depois ir escolher segmentos cubram zona ainda não coberta Algumas possíveis ideias: [Início mais cedo] Alocar por ordem ascendente de l i [Final mais cedo] Alocar por ordem ascendente de r i [Tamanho maior] Alocar por ordem descendente de r i l i Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 29 / 40

Cobertura mínima [Final mais cedo] Alocar por ordem ascendente de r i Neste problema não faz sentido! Contra-Exemplo: Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 30 / 40

Cobertura mínima [Tamanho maior] Alocar por ordem descendente de r i l i Contra-Exemplo: Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 31 / 40

Cobertura mínima [Início mais cedo] Alocar por ordem ascendente de l i Parece ser uma boa ideia, porque precisamos de alocar o espaço desde início... Mas o que acontece se existirem empates? Em caso de empate escolhemos o maior! (o que termina depois) E será isto suficiente? Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 32 / 40

Cobertura mínima [Início mais cedo] Alocar por ordem ascendente de l i e em caso de empate escolher o maior O que acontece neste caso? Se já temos coberto até ao ponto end, temos de escolher o segmento que começa em ponto inferior ou igual a end e termina o mais para a frente possível! Intuição: temos sempre de cobrir a partir de end. Logo, o melhor que podemos fazer é com um único segmento cobrir até o mais longe possível! Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 33 / 40

Cobertura mínima Algoritmo greedy para cobertura mínima Ordenar actividades por ordem crescente do seu início (l i ). Começar por iniciar end = 0 (sendo que vamos sempre tendo coberto o segmento [0, end]) Processar na lista todos os segmentos que têm início pelo menos em end (l i end), e escolher destes o que termina depois (maior r i ). Actualizar end para o sítio onde termina o segmento escolhido e repetir o passo anterior até que end M Complexidade: Ordenar: O(n log n) Processar: O(n) Total: O(n log n) Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 34 / 40

Soma de Custo Mínimo Imagine que somar a e b custa a + b. Por exemplo, somar 1 com 10 custaria 11. Se agora quisermos somar os números {1, 2, 3}, existem várias maneiras (ordens) de o fazer, dando origem a custos totais diferentes: Hipótese A 1 1 + 2 = 3 (custo 3) 2 3 + 3 = 6 (custo 6) Custo Total: 9 Hipótese B 1 1 + 3 = 4 (custo 3) 2 4 + 2 = 6 (custo 6) Custo Total: 10 Hipótese C 1 2 + 3 = 5 (custo 5) 2 5 + 1 = 6 (custo 6) Custo Total: 11 Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 35 / 40

Soma de Custo Mínimo Problema da Soma de Custo Mínimo Input: Um conjunto de n números inteiros. Output: Descobrir o menor custo possível para os somar todos, sabendo que somar a com b tem um custo de a + b Exemplo de Input/Output Input: 3 números: {1, 2, 3} Input: 9 (custo de fazer primeiro 1 + 2 seguido de 3 + 3). Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 36 / 40

Soma de Custo Mínimo Que estratégia greedy usar aqui? E já estou a ajudar muito ao dizer que greedy funciona... Escolher em cada momento os dois números mais pequenos! Intuição: quanto menores os números, menor o custo a soma final é inevitável (seja qual for a ordem terá custo igual à soma de todos) consideremos os números a, b e c. Se a solução greedy optar por a + b é porque c a e c b. Sendo assim, o custo de a + c ou de b + c seria superior ou igual a + b e depois viria uma soma com custo a + b + c. nenhuma outra solução consegue ser melhor que greedy! Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 37 / 40

Soma de Custo Mínimo Algoritmo greedy para soma de custo mínimo Repetir os seguintes passos até a lista de números ficar vazia Remover os dois números mais pequenos a e b Adicionar a + b ao custo total Inserir a + b na lista de números Complexidade: Número de Passos: O(n) Cada passo: Remover dois mais pequenos Adicionar dois números Inserir dois números Total: Depende das operações de retirar dois mínimos e de inserir! Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 38 / 40

Soma de Custo Mínimo Adicionar dois números: O(1)! Inserir e Remover (os dois mais pequenos): Array desordenado: inserir em O(1) e remover em O(n) Array ordenado: inserir em O(n) e remover em O(1) Estrutura de dados especializada (ex: heap): inserir em O(log n) e remover em O(log n) Complexidade: Número de Passos: O(n) Cada passo: O(n) para um algoritmo mais básico O(log n) se tivermos uma estrutura de dados especializada Total: O(n 2 ) ou O(n log n) Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 39 / 40

Algoritmos Greedy Uma ideia muito poderosa e flexível O difícil é provar que dá origem a resultado ótimo Optimalidade não é garantida porque não explora de forma completa todo o espaço de procura Geralmente é mais fácil provar a incorrecção (via contra-exemplo) Uma maneira de analisar é pensar num caso onde existem hipóteses na condição greedy: o que escolhe o algoritmo nesse caso? Quando funcionam, costumam ter complexidade baixa Não existe receita mágica para todos os greedy: experiência é necessária! Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/2015 40 / 40