Escolar Documentos
Profissional Documentos
Cultura Documentos
AV3 - Lab02
AV3 - Lab02
Exercício 1
inicio = System.currentTimeMillis();
q = trocoDinamico(troco, padrao);
fim = System.currentTimeMillis();
tempo = fim - inicio;
if (q == Integer.MAX_VALUE) {q = -1;}
System.out.printf("%-15s%10s%10s\n", "Método", "Qtde", "Tempo");
System.out.printf("%-15s%10d%10.2f\n\n", "Dinâmico", q, tempo);
inicio = System.currentTimeMillis();
qtde = new int[troco+1];
for (int t = 0; t <= troco; t++) {
qtde[t] = -1;
}
q = trocoMemoization(troco, padrao);
fim = System.currentTimeMillis();
tempo = fim - inicio;
if (q == Integer.MAX_VALUE) {q = -1;}
System.out.printf("%-15s%10s%10s\n", "Método", "Qtde", "Tempo");
System.out.printf("%-15s%10d%10.2f\n\n", "Memoization", q, tempo);
inicio = System.currentTimeMillis();
q = trocoRecursivo(troco, padrao);
fim = System.currentTimeMillis();
tempo = fim - inicio;
if (q == Integer.MAX_VALUE) {q = -1;}
System.out.printf("%-15s%10s%10s\n", "Método", "Qtde", "Tempo");
System.out.printf("%-15s%10d%10.2f\n\n", "Recursivo", q, tempo);
}
}
Passo 2: Considere o problema do troco que, dados um padrão de cédulas P e um valor de troco t, deseja-
se determinar a quantidade mínima de cédulas necessárias para perfazer o troco. Seja q[t] a quantidade
mínima de cédulas necessárias para satisfazer o troco t no padrão de cédulas P. Dada a definição
recursiva de q[t] abaixo e sua implementação na função trocoRecursivo, explique:
0, se t=0 ;
q [t]={ min {q[t− pi ]+1 }, caso contrário.
pi ∈ P : p i ≤ t
Passo 3: Faça uma implementação recursiva para o problema utilizando memoization. (15%)
if (q < 0) {
q = Integer.MAX_VALUE;
}
if (q < qMin) {
qMin = q;
}
}
}
return qMin;
}
return 0;
}
Passo 4: Faça uma implementação em programação dinâmica para o problema, onde os vetores q[t] e c[t]
são utilizados, respectivamente, para armazenar a quantidade de cédulas e o valor da última cédula
escolhida para perfazer um troco de valor t. (30%)
if (t >= padrao[p]) {
imprimeTroco(troco, c);
return q[troco];
}
Passo 5: Faça uma implementação do método imprimirTroco para imprimir as cédulas utilizadas para
perfazer o troco t do algoritmo de programação dinâmica. (15%)
if (t >= padrao[p]) {
imprimeTroco(troco, c);
return q[troco];
}
Passo 6: Realize a análise de complexidade da função trocoDinamico, assumindo como parâmetro de
tamanho do problema o valor do troco (já que, na prática, a quantidade de cédulas do padrão geralmente é
constante). (10%)
Passo 7: Modifique o padrão de cédulas para {7, 17, 25}. Exiba a saída do programa para valor de troco
igual a 33. O que quer dizer esta saída? (5%)
R: Significa que não há uma forma de pagar o valor exato do troco com as cédulas disponíveis.
Passo 8: O que acontece com a execução do programa, utilizando o padrão de cédulas {1, 7, 17, 25}, caso
o valor do troco seja mudado para 100? Explique porque o programa se comporta desta maneira. (5%)
R: Os métodos que usam recursividade demoraram mais para executar do que o método dinâmico, isso
acontece pois os métodos recursivos são mais complexos que o dinâmico.
Passo 9: Indicar o nome dos integrantes da equipe que participaram efetivamente na resolução deste
laboratório. (0%)