Académique Documents
Professionnel Documents
Culture Documents
Ser capaz de... Identificar as aplicaes em que algoritmos gulosos podem ser utilizados Definir os principais procedimentos utilizados para a construo de um algoritmo guloso Identificar os elementos essenciais para mostrar a corretude de algoritmos gulosos
Sempre escolhe a opo que parece a melhor a cada momento Nunca reverte ou reconsidera a deciso
Uso de uma funo para verificar se um conjunto particular de candidatos produz uma soluo (ainda sem considerar a otimalidade)
Outra funo verifica se o conjunto de candidatos vivel (tambm sem se preocupar com a otimalidade)
Funo de seleo indica a qualquer momento quais dos candidatos restantes mais promissor Funo objetivo fornece o valor da soluo encontrada
Diversas atividades precisam ser planejadas, mas elas todas dependem de um mesmo recurso
Diversas aulas que precisam ser dadas em uma mesma sala Duas aulas no podem ser dadas na mesma sala ao mesmo tempo
Problema contm uma lista com o horrio de incio e trmino de cada atividade - Como maximizar o nmero de atividades que podem ser realizadas?
Ilustrao grfica
11 atividades, em 14 horas
Definio do problema:
S = {a , . . . , a }: conjunto de n atividades que podem ser executadas em um mesmo local.
1 n
Para todo i = 1, . . . , n, a atividade ai comea no instante si e termina no instante fi , com 0 si < fi < . Ou seja, supe-se que a atividade ai ser executada no intervalo de tempo (semiaberto) [si , fi ).
Escolher primeiro as atividades que terminam antes Conjunto mximo de atividades compatveis: (a1, a4, a8, a11).
... // as atividades devem ser ordenadas pelo campo fim // ou seja, as atividades que acabam primeiro ficam na frente private static int[] inicio = { 1,3,0,5,3,5, 6, 8, 8, 2,12 }; private static int[] fim = { 4,5,6,7,8,9,10,11,12,13,14 }; private static int numeroDeAtividades = 11; public static void main(String[] args) { int total=selecaoGulosa(inicio,fim,numeroDeAtividades); System.out.println("Foram selecionadas " + total + " atividades."); } }
Dados:
Uma mochila que admite um certo peso; Um conjunto de objetos, cada um com um valor e um peso;
Objetivo:
Selecionar o conjunto de objetos que caibam dentro da mochila de forma a maximizar o valor total dentro da mochila.
Mochila fracionada (objetos podem ser quebrados) Melhor soluo para ordenar a entrada
ordenar pelo valor/peso
Mochila fracionada (objetos podem ser quebrados) Melhor soluo para ordenar a entrada
ordenar pelo valor/peso
// W = capacidade mxima da mochila // n = nmero de items load = 0 // carga na mochila i=1 while (load < W) and (i <= n) do { if (wi <= (W load) Pegue todo o item i else Pegue (W load)/wi do item i Adicione a load o peso que foi pego i++ }
Ser capaz de... Identificar as aplicaes em que algoritmos gulosos podem ser utilizados Definir os principais procedimentos utilizados para a construo de um algoritmo guloso Identificar os elementos essenciais para mostrar a corretude de algoritmos gulosos
Cormen, Thomas H.; et al. Introduction to Algorithms. MIT Press, 2001 Parte deste material foi baseado nos slides:
Prof. Norton T. Roman, que estendeu o trabalho de Delano M. Beder, Luciano Digianpietri, David Matuszek, Marco Aurelio Stefanes e Nivio Ziviani disponvel em http://www.each.usp.br/digiampietri/ACH2002/nota sdeaula/9-algoritmosGulosos.pdf
Cid Carvalho de Souza Candida Nunes da Silva, Orlando Lee
http://www.ic.unicamp.br/~lee/mo417/guloso.pdf