Constrói uma solução por meio de uma sequência de decisões
Geralmente são rápidos e fáceis de implementar
Algoritmos gulosos são eficientes se:
Problemas que tem sub-estrutura ótima, a solução ótima do problema é composta pelas soluções ótimas dos sub-problema menores
ContaDinheiro(n)
i = 1
notas = [50,10,5,1]
Enquanto (i <= tamanho(notas))
a[i] = n % notas[i] //divisão inteira
n = n - a[i]
nk=nk+i∑knotas[i]×a[i]=(nk−1−(notas[k]×a[k]))+i∑knotas[i]×a[i]=nk−1+(i∑knotas[i]×a[i]−(notas[k]×a[k]))=nk−1+i∑k−inotas[i]×a[i]
Dado um conjunto T=t1,...,tn com n tarefas em que cada ti∈T tem um tempo inicial si e um tempo final fi, encontrar o maior subconjunto de tarefas mutuamente compatíveis.
É fácil notar que o laço da linha 5 é executado em O(n), pois percorre a lista de tarefas
A complexidade do algotirmo é dada pela ordenação das tarefas, que pode ser executada em O(nlogn)
Dado conjunto T=t1,...,tn com n tarefas em que cada ti∈T tem um tempo inicial si e um tempo final fi, o algoritmo
EscalonaCompativel(T,n)
retorna uma solução ótima para o problema de Escalonamento de tarefas compatíveis.
Suponha que acabamos de selecionar pi, e ainda existe uma solução S que extende nossas escolhas atuais
Considere também que a próxima tarefa com menor tempo de término é a tk
Seja ∣S[i]∣ número de atividades que podem ser feitas após a tarefa i.
Esse número é dado pela solução do subproblema após a tarefa ti
Dado um conjunto I=1,2,⋯,n de n itens em que cada i∈I tem um peso wi e um valor vi associados e dada uma mochila com capacidade de peso W, selecionar frações fi∈[0,1] dos itens tal que ∑i=1fiwi≤W e ∑i=1fiwi é máximo.
Uma estratégia gulosa óbvia é sempre escolher o item de maior valor que cabe na mochila.
No exemplo anterior, escolheriamos os itens 3 primeiro e em seguida o item 2, esgotando a capacidade da mochila com um valor total de $220
Entretanto, essa estratégia não é ótima.
Se escolhermos os itens 1, 2 e 2/3 do item 3, esgotando a capacidade da mochila, o valor total é $240
O que o algoritmo faz é selecionar os objetos em ordem decrescente de vi/wi até preencher toda a mochila.
Queremos provar que esta estratégia produz uma solução ótima para o problema da mochila fracionária.
Suponha sem perda de generalidade que os objetos disponíveis são numerados em ordem decrescente de valor por unidade de peso, isto é:
w1v1≥w2v2≥⋯≥wnvn
Agora considere o valor da solução f como sendo V(f)=∑fivi .
Agora considere g=(g1,g2,⋯,gn) qualquer outra solução viável. - Como g é viável então ∑giwi=W, com este fato notamos também que ∑(fi−gi)wi≥0.
Considere o valor da solução g como sendo V(g)=∑givi, assim temos
V(f)−V(g)=∑(fi−gi)vi=(xi−yi)wiwivi