Escolar Documentos
Profissional Documentos
Cultura Documentos
maxFuncaoPremio(A, B) {
1 ordenaDecrescente(A) // θ(nlogn)
2 ordenaDecrescente(B) // θ(nlogn)
3 return funcaoPremio(A, B)// θ(1)
}
Temos que o tempo de execução da função é θ(n log n) cumprindo o que foi
proposto no enunciado. Agora iremos provar sua corretude, claramente para isso devemos
provar que para quaisquer índices i < j, vale que :
2 - Para resolver esse problema podemos adotar uma estratégia gulosa que ordena de
forma crescente as tarefas pelo tempo de processamento, assim podemos ter um algoritmo
como :
determinaMenorTempoMedio(S, n) {
1 F = {} // vetor vazio que conterá os valores de fi θ(1)
2 tempoMedio = 0 // θ(1)
3 tempoTotal = 0 // θ(1)
4 ordenaCrescentePorTempoProcessamento(S) // θ(nlogn)
5 para i = 1 até n : // θ(n)
6 F.adiciona(S[i] + tempoTotal) // θ(n)
7 tempoMedio = somaValoresdoVetor(F)/n // θ(1)
8 return tempoMedio // θ(1)
}
** Chamamos a somatória dos valores que vão até (i, j) de K e a somatória dos valores após
(i, j) de L.
Vimos então que conseguimos diminuir o delta realizando a troca seguindo o nosso
critério guloso, o que é um absurdo pois sigma* deveria ser uma ótima solução. Logo,
conseguimos provar que a nossa solução é correta.
3-
c-
Para realizar a solução do problema tomamos o algoritmo que resolve o problema
da mochila binária como base e efetuamos uma modificação que nos permita adicionar o
mesmo item mais de uma vez, a grande “sacada” está na linha 10 :
Além disso, como falado no exercício anterior, fizemos uma adaptação do algoritmo que
resolve a mochila binária (KP) e essa alteração não modifica o tempo de execução do
algoritmo, portanto, BKP roda em tempo θ(nW), i.e, em tempo pseudo-polinomial.