Buscar

AlgoritmoGuloso

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS UNIDADE SÃO 
GABRIEL 
 
BACHAREL EM SISTEMAS DE INFORMAÇÃO 
 
 
 
 
 
 
 
 
 
Lista de exercício 
 
Técnicas Avançadas de Programação 
 
 
 
 
 
 
 
 
Aluno: João Victor Tavares Emilio 
Número de Matrícula: 668775 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
MARÇO 2021 
1. Apresente um esboço do esquema geral da Técnica de Projeto de 
Algoritmo Guloso. 
Resposta: 
1- Primeiramente vamos definir a subestrutura ótima: 
• Aqui vamos definir quais os SUB problemas podem ser resolvidos 
de maneira ótima na qual vai alcançar uma ótima solução do 
problema original. 
2- Apos isso vamos definir o critério guloso desse algoritmo: 
• Aqui podemos escolher como o conjunto de entrada vai ser 
ordenado, definindo assim a melhor escolha local. 
3- Apos essa sequência de decisões, vamos chegar a alguma solução para 
nosso problema: 
• Nessa sequencia nenhum elemento será analisado mais de uma 
vez, ou ele faz parte da nossa solução ou ele é removido. 
 
 
 
2. Considere os algoritmos baseados em Algoritmo Guloso. Quando eles 
são utilizados? 
 Qual é o principal problema que enfrentam os algoritmos gulosos? 
Resposta: 
O algoritmo guloso será usado quando a função de seleção será relacionada a 
função de objetivo, como achar o menor custo (minimizar) ou maximizar um ganho 
individual. O seu principal problema é que não será em todos os casos que ele 
vai encontrar a solução global ótima. 
 
 
3. Suponha que tenhamos disponíveis moedas com valores de 100, 25, 10, 5 
e 1. O problema é criar um algoritmo que para conseguir obter um 
determinado valor com o menor número de moedas possível (problema do 
troco). Escreva um Algoritmo Guloso para determinar uma solução do 
problema. Execute seu algoritmo e mostre o resultado para os seguintes 
valores: 55, 67, 23 e 141. 
 
 
 
 
Resposta: 
1- Primeiramente, nos vamos ordenar as moedas e definir a subestrutura 
ótima. Critério guloso: 
• Vamos selecionar a moeda com maior valor disponível, o valor da 
moeda não pode ser maior que o valor que foi selecionado; 
• Se a moeda for maior que o valor, vamos passar para a próxima 
maior moeda, e vamos repetir isso até que a moeda não seja maior 
que o valor; 
• Uma moeda pode se repetir e podemos usar outras moedas 
também, podemos fazer isso enquanto o nosso valor selecionado 
não for ultrapassado. Vamos repetir e escolher novas moedas até 
encontrar o valor. 
2- Vamos fazer para cada moeda agora: 
• Moeda valor 55: Aqui vamos comparar: 
o 55 não é menor que 100; 
o 55 é maior que 25; 
Vamos pegar então duas moedas com valor 25 que é a maior 
possibilidade, assim teremos 50 e resto 5, agora vamos pegar outra 
moeda para comparar ao troco: 
o 5 é menor que 100; 
o 5 é menor que 25; 
o 5 é menor que 10; 
o 5 é igual a 5; 
Vamos pegar então mais uma moeda de 5. A solução é pegar duas 
moedas de 25 e uma de 5 
 
• Moeda valor 67: Vamos comparar: 
o 67 não é menor que 100; 
o 67 é maior que 25: 
Vamos pegar então duas moedas de 25 que será a maior 
possibilidade, teremos assim 50, 50 – 67 terá um resto de 17, vamos 
pegar outras moedas para comparar com o troco: 
o 17 não é maior que 100; 
o 17 não é maior que 25; 
o 17 é maior que 10: 
Vamos pegar então uma moeda de 10 que será a maior 
possibilidade, teremos assim um total de 60, 60 – 67 terá um resto 
de 7, vamos pegar outras moedas para comparar com o troco: 
o 7 não é maior que 100; 
o 7 não é maior que 25; 
o 7 não é maior que 10; 
o 7 é maior que 5: 
Vamos pegar então uma moeda de 5 que será a maior possibilidade, 
teremos assim um total de 65, 65 – 67 terá um resto de 2, vamos 
pegar outras moedas para comparar com o troco: 
o 2 não é maior que 100; 
o 2 não é maior que 25; 
o 2 não é maior que 10; 
o 2 não é maior que 5; 
o 2 é maior que 1: 
Vamos pegar então duas moedas de 1. A solução é pegar duas 
moedas de 25, uma de 10, uma de 5 e duas de 1. 
 
• Moeda valor 23: Vamos comparar: 
o 23 é menor que 100; 
o 23 é menor que 25; 
o 23 é maior que 10: 
Vamos pegar então duas moedas de 10 que será a maior 
possibilidade, teremos assim um total de 20, 23 - 20 terá um resto 
de 3, vamos pegar outras moedas para comparar com o troco: 
o 3 é menor que 100; 
o 3 é menor que 25; 
o 3 é menor que 10; 
o 3 é menor que 5; 
o 3 é maior que 1: 
Vamos pegar então três moedas de 1. A solução é pegar duas 
moedas de 10 e três de 1. 
 
• Moeda valor 141: Vamos comparar: 
o 141 é maior que 100: 
Vamos pegar então uma moeda de 100 que será a maior 
possibilidade, teremos assim um total de 100, 141 – 100 terá resto 
de 41, vamos pegar outras moedas para comparar com o troco: 
o 41 é menor que 100; 
o 41 é maior que 25: 
Vamos pegar então uma moeda de 25 que será a maior 
possibilidade, teremos assim um total de 125, 141 – 125 terá resto 
de 16, vamos pegar outras moedas para comparar com o troco: 
o 16 é menor que 100; 
o 16 é menor que 25; 
o 16 é maior que 10: 
Vamos pegar então uma moeda de 10 que será a maior 
possibilidade, teremos assim um total de 135, 141 – 135 terá resto 
de 6, vamos pegar outras moedas para comparar com o troco: 
o 6 é menor que 100; 
o 6 é menor que 25; 
o 6 é menor que 10; 
o 6 é maior que 5: 
Vamos pegar então uma moeda de 5 que será a maior possibilidade, 
teremos assim um total de 140, 141 – 140 terá resto de 1, vamos 
pegar outras moedas para comparar com o troco: 
o 1 é menor que 100; 
o 1 é menor que 25; 
o 1 é menor que 10; 
o 1 é menor que 5; 
o 1 é igual a 1: 
Vamos pegar então uma moeda de cada, uma de 100, uma de 25, 
uma de 10, uma de 5 e uma de 1. 
 
 
 
4. A empresa KeroLeite precisa comprar N litros de leite por dia. A empresa 
tem M possíveis fornecedores. Cada fornecedor tem um limite de produção 
de leite ci e preço por litro pi, 1 ≤ i ≤ M. Queremos comprar N litros com o 
menor custo possível. Escreva um Algoritmo Guloso para determinar uma 
solução do problema. Execute seu algoritmo e mostre o resultado quando a 
demanda da empresa é de 100 litros de leite. O número de fornecedores é 5. 
A lista de fornecedores segue abaixo com o preço por litro e a sua produção: 
 
 
 
 
 
 
Resposta: 
1. Primeiro nos vamos dar nosso critério guloso: vamos pegar empresas de 
menor preço por litro e comprar com ela até não podermos mais (no caso 
até aonde a produção dela suportar), quando não der mais para usar essa 
empresa escolheremos outra com menor preço de produção, vamos fazer 
isso até comprar toda a quantidade de leite necessário. 
• Valor de N igual a 100: 
• Vamos pegar a empresa com menor preço do litro: 
o Empresa 3, preço do litro = 3, produção 10 
• Agora pegamos a empresa com próximo menor valor: 
o Empresa 1, preço do litro = 5, produção 20 
o Temos um total de 30 litros 
• Agora pegamos a empresa com próximo menor valor: 
o Empresa 5, preço do litro = 6, produção 30 
o Total de 60 litros 
• Agora pegamos a empresa com próximo menor valor: 
o Empresa 4, preço do litro = 8, produção 80 (nesse caso 
precisamos apenas de 40 pois já temos 60 litros) 
o Total de 100 litros. 
 
5. Problema Consertando o Celeiro: Temos uma longa lista de M estábulos 
ocupados que devem ser vedados com placas. Você pode usar até N placas, 
uma placa pode cobrir qualquer número de cocheiras consecutivas depende 
apenas do seu comprimento. Você escolhe o comprimento da placa, mas a 
placa não pode ser cortada. O custo da placa é igual ao comprimento da 
placa. Cubra todas as cocheiras ocupadas, com o menor custo possível. 
Como resolver o problema usando Algoritmo Guloso? 
• Exemplifique a utilizando do seu algoritmo levando em consideração o 
seguinte cenário: -- O número de placas que podem ser encomendadas são 
4. O número máximo de celeiros é 50. O número de estábulos ocupados é 
18. Os seguintes celeiros estão ocupados: 3 4 6 8 14 15 16 17 21 25 26 27 30 
31 40 41 42 43. 
Resposta: 
 
1. Primeiramente, vamos criar nosso critérioguloso: 
• Vamos considerar que esses 18 valores então em um vetor, o 
algoritmo vai passar por todas as posições e subtrair o próximo valor 
pelo atual valor do vetor selecionado, dessa forma vamos achar as 
três distâncias que não vão precisar de placas. Nós também vamos 
armazenar essas posições; 
2. Agora o algoritmo vai colocar a placa do primeiro valor do vetor (3 que 
é o primeiro do nosso vetor) até o valor da nossa primeira separação 
(8): 
• O comprimento da placa será de 8 - 3 +1 = 6 
3. Agora vamos para a placa de número 14 até a 17: 
• O comprimento da placa será de 14 – 17 + 1 = 4 
4. Vamos para a próxima placa de 21 a 31: 
• O comprimento da placa será de 21 – 31 + 1 = 11 
5. Nossa última placa vai começar do 40 até o 43 
• O comprimento da placa será de 40 – 43 + 1 = 4 
6. O resultado é 4 placas com os respectivos comprimentos: 6, 4, 11 e 4.

Outros materiais