SlideShare uma empresa Scribd logo
Algoritmos Gulosos
Troco Mínimo
Gabriel Ramalho
Túlio Lemes
Vinicius Rodrigues
1.1 Definição do Problema: Dado a necessidade de representar
um certo valor (troco) com o menor número de moedas possível,
utilizamos algoritmos gulosos para buscar soluções ótimas (o que
nem sempre ocorre).
Podemos tomar como exemplo eventos da vida real:
● Caixas de bancos e estabelecimentos comerciais
freqüentemente trabalham com a tarefa de produzir troco,
procurando fazê-la da maneira mais eficiente possível.
1. Motivação
Dado os tipos de moedas de um país, determinar o número
mínimo de moedas para dar um troco de valor n.
1.2 Descrição Informal:
Questão: Dado K denominações de moedas M[k] = { m1
, m2
, m3
,...,
mk
}, tal que m1
< m2
< ... < mk
e supondo um troco para n, encontre
uma solução C[n] = x1
m1
+ x2
m2
+ ... + xk
mk
, tal que x1
+ x2
+ ... + xk
seja o menor possível.
Entrada:
● M[k] = {m1
, m2
, m3
, …, mk
} (conjunto de moedas)
● Valor a ser gerado pelas moedas = n
● Quantidade de moedas = k
Saída: Quantidade de moedas utilizadas para gerar o troco.
1.3 Descrição Formal:
Suponha que é preciso “dar um troco” de $289,00 e temos
disponíveis moedas com valores de 100, 50, 25, 5 e 1
Menor número de moedas possível:
2 de valor 100
1 de valor 50
1 de valor 25
2 de valor 5
4 de valor 1
De forma geral, agimos tal como um algoritmo guloso: em cada
estágio adicionamos a moeda de maior valor possível, de forma a
não passar da quantia necessária.
1.4 Exemplo:
Moedas = {1, 5, 25, 50, 100}
Tamanho do Vetor = 5
Troco = 289
Total de Moedas= 0
1.4.1 Exemplo:
Tamanho do Vetor = i = 5
⌊ ( Troco/Moedas[i] ) ⌋ = ⌊ ( 289/100 ) ⌋ = 2
Troco = 289 - ( ⌊ ( 289/100 ) ⌋ * 100) = 289 - 200 = 89
Total de Moedas = ⌊ ( 289/100 ) ⌋ = 2
1.4.1 Exemplo:
Tamanho do Vetor = i = 4
⌊ ( Troco/Moedas[i] ) ⌋ = ⌊ ( 89/50 ) ⌋ = 1
Troco = 89 - ( ⌊ ( 89/50 ) ⌋ * 50) = 89 - 50 = 39
Total de Moedas = 2 + ⌊ ( 89/50 ) ⌋ = 2 + 1 = 3
1.4.1 Exemplo:
Tamanho do Vetor = i = 3
⌊ ( Troco/Moedas[i] ) ⌋ = ⌊ ( 39/25 ⌋ = 1
Troco = 39 - ( ⌊ ( 39/25 ) ⌋ * 25) = 39 - 25 = 14
Total de Moedas = 3 + ⌊ ( 39/25 ) ⌋ = 3 + 1 = 4
1.4.1 Exemplo:
Tamanho do Vetor = i = 2
⌊ ( Troco/Moedas[i] ) ⌋ = ⌊ ( 14/5 ⌋ = 4
Troco = 14 - ( ⌊ ( 14/5 ) ⌋ * 5) = 14 - 10 = 4
Total de Moedas = 4 + ⌊ ( 14/5 ) ⌋ = 4 + 2 = 6
1.4.1 Exemplo:
Tamanho do Vetor = i = 1
⌊ ( Troco/Moedas[i] ) ⌋ = ⌊ ( 4/1 ⌋ = 4
Troco = 4 - ( ⌊ ( 4/1 ) ⌋ * 1) = 4 - 4 = 0
Total de Moedas = 6 + ⌊ ( 4/1 ) ⌋ = 6 + 4 = 10
1.4.1 Exemplo:
Mas, nem sempre essa estratégia funciona, por exemplo:
Suponha que e preciso “dar um troco” de $20,00 e temos
disponíveis moedas com valores de 100, 50, 24, 12, 5, 1
Usando a estratégia anterior:
1 de valor 12
1 de valor 5
3 de valor 1
O que é errado, pois é possível dar um troco utilizando 4 moedas
de valor 5.
1.4.2 Exemplo:
2. Algoritmo
// d é um vetor com os valores das moedas, ordenado do maior para o menor
// k é a quantidade de elementos nesse vetor
// n é o valor do troco
Função Troco(d, k, n)
S <- 0 // número mínimo de moedas (solução ótima)
s <- [] // vetor que irá guardar a quantidade de moedas utilizadas para cada valor do vetor S
i <- 0
enquanto i < k, faça:
s[i] <- ⌊n / d[i]⌋ // divide o troco pelo valor da moeda atual
n <- n - s[i] * d[i] // diminui do valor do troco, o valor parcial
S <- S + s[i] // incrementa S com a quantidade de moedas utilizadas
i <- i + 1
fim enquanto
retorne S
Quando o método guloso funciona, o algoritmo é, em
geral, eficiente.
Figurativamente, a solução gulosa consiste em, a cada
passo, escolher o melhor pedaço possível e não se
arrepender.
Para saber se o método guloso funciona, é necessário
provar que o algoritmo resolve o problema.
3. Análise do Algoritmo
Porque o método funciona para o seguinte
conjunto de moedas?
M = [1, 5, 10, 25, 50, 100]
3. Análise do Algoritmo
1. A tabela abaixo mostra o máximo de moedas de cada tipo usado
em um troco mínimo, pois, para cada aumento nesses valores,
existe outra opção com menos moedas. Adicionalmente, não se
pode usar simultâneamente 2 moedas de 10 e 1 de 5.
3. Análise do Algoritmo
1 5 10 25 50 100
4 1 2 1 1 ∞
2. O valor máximo conseguido com as moedas tipos 1 a 5 é 99.
Logo, qualquer troco x > 99 usa tantas moedas de 100 quanto
necessário.
3. O valor máximo conseguido com as moedas tipos 1 a 4 é 49.
Logo, qualquer troco x, 100 > x > 49, usa 1 moeda de 50.
4. O valor máximo conseguido com as moedas tipos 1 a 3 é 24.
Logo, qualquer troco x, 50 > x > 24, usa 1 moeda de 25.
5.O valor máximo conseguido com as moedas tipos 1 e 2 é 9.
Logo, qualquer troco x, 25 > x > 9, usa 1 ou 2 moedas de 10.
3. Análise do Algoritmo
6. O valor máximo conseguido com as moedas do tipo 1 é 4. Logo,
todo valor x, 10 > x > 4 usa 1 moeda de 5.
Conclusão: o troco mínimo obtido pelas considerações anteriores
é exatamente aquele obtido com o algoritmo guloso. Logo, o
método guloso funciona corretamente para esse conjunto de
moedas.
3. Análise do Algoritmo
3.1 Prova de Corretude:
•Consideremos S={s1
,s2
,...,sx
} um conjunto com todas moedas
utilizadas para gerar uma solução ótima obtida a partir do
algoritmo, cujas moedas são {1, 5, 25, 50, 100}.
• Por contradição, assuma a existência de outra solução chamada
S′={s′1
, s′2
,...,s′y
}
• S′ possui um menor número de moedas que S.
3. Análise do Algoritmo
•q → nº de moedas de um determinado valor em S.
•q′ → nº de moedas de um determinado valor em S′.
•Usando q(100) e q’(100), e supondo que troco > 100, podemos
concluir que:
troco = (q(100) * 100) + r, r < 100
•Logo, se considerarmos que q’(100) < q(100):
troco = (q’(100) * 100) + r’, r’ >= 100
3.1 Prova de Corretude
•Podemos afirmar que esta não é uma solução ótima, pois se r’ é
maior que 100, haveria a chance de q’(100) ser acrescido.
•Analogamente podemos considerar as quantidades de moedas
menores.
troco = (q’(100) * 100) + (q’(50) * 50) + ... + (q’(1) * 1) + r’
r’ >= 1
3.1 Prova de Corretude
•Isto é absurdo, pois r’ não pode ser maior ou igual a 1 tendo em
vista que a soma de todas as moedas utilizadas já equivale ao
troco desejado, ou seja:
troco = (q’(100) * 100) + (q’(50) * 50) + ... + (q’(1) * 1)
•Se considerarmos q = q’, também será uma situação absurda,
pois os somatórios das quantidades de moedas de q, e de q’
nunca serão iguais, já que S > S’, ficando provado que S’ não
existe.
3.1 Prova de Corretude
•Nem sempre é possível afirmar que o algoritmo guloso fornece
uma solução ótima, para todos os conjuntos de moedas. Exemplo:
• Moedas = {1, 7, 15, 20}
Troco = 31
S = {20, 7, 1, 1, 1, 1}
•Esta solução não é ótima, pois existe S’ = {15, 15, 1}
3.1 Prova de Corretude
O algoritmo possui uma interação de k até 1. Desta forma, a função que
representa a complexidade do algoritmo é:
Onde c representa uma constante referente aos passos realizados dentro
do comando de repetição. Assim, procedendo à análise assintótica do
problema temos que:
3. Complexidade
Conclusão:
Vantagens:
● Rápido e Eficiente
● Simples e de fácil implementação
Desvantagens:
● Nem sempre fornece uma solução ótima
● Não reconsidera uma solução tomada
Conclusão:
● Complexidade de O(n)
● Programação dinâmica é melhor
Bibliografia:
● http://www.ime.uerj.br/~pauloedp/ALGO/Download/ALSLGULO.pdf
● http://www.ic.unicamp.br/~rocha/msc/complex/algoritmosGulososFinal.pdf
● http://wpattern.com/blog/post/2012/03/24/Problema-do-Troco-Analise-de-
Algoritmos.aspx
● https://docs.google.com/presentation/d/1LHv2ymwaCh8xeyZ2X170IU-
WnCkUBZ75IClAjs0-_XM/edit#slide=id.p32

Mais conteúdo relacionado

Mais procurados

Exercícios Resolvidos: Teorema de Rolle
Exercícios Resolvidos: Teorema de RolleExercícios Resolvidos: Teorema de Rolle
Exercícios Resolvidos: Teorema de RolleDiego Oliveira
 
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...André Constantino da Silva
 
Análise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NPAnálise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NPDelacyr Ferreira
 
Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Gercélia Ramos
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordGabriel Albuquerque
 
Implicação Lógica
Implicação LógicaImplicação Lógica
Implicação LógicaHugo Souza
 
Matemática Discreta - Parte III definicoes indutivas
Matemática Discreta - Parte III definicoes indutivasMatemática Discreta - Parte III definicoes indutivas
Matemática Discreta - Parte III definicoes indutivasUlrich Schiel
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Universidade de São Paulo
 
Programação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaProgramação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaGabriel Albuquerque
 
Resumo dos testes de convergência
Resumo dos testes de convergênciaResumo dos testes de convergência
Resumo dos testes de convergênciaPedro Neto
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Marcos Castro
 

Mais procurados (20)

Pequeno teorema de fermat
Pequeno teorema de fermatPequeno teorema de fermat
Pequeno teorema de fermat
 
Exercícios Resolvidos: Teorema de Rolle
Exercícios Resolvidos: Teorema de RolleExercícios Resolvidos: Teorema de Rolle
Exercícios Resolvidos: Teorema de Rolle
 
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...
 
Análise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NPAnálise de Algoritmos - As classes P e NP
Análise de Algoritmos - As classes P e NP
 
Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)
 
Porcentagem
PorcentagemPorcentagem
Porcentagem
 
Aula 07 derivadas - regras de derivação - parte 1
Aula 07   derivadas - regras de derivação - parte 1Aula 07   derivadas - regras de derivação - parte 1
Aula 07 derivadas - regras de derivação - parte 1
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
 
Implicação Lógica
Implicação LógicaImplicação Lógica
Implicação Lógica
 
Introdução ao R
Introdução ao RIntrodução ao R
Introdução ao R
 
Matemática Discreta - Parte III definicoes indutivas
Matemática Discreta - Parte III definicoes indutivasMatemática Discreta - Parte III definicoes indutivas
Matemática Discreta - Parte III definicoes indutivas
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
 
Matemática básica derivada e integral
Matemática básica   derivada e integralMatemática básica   derivada e integral
Matemática básica derivada e integral
 
Programação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaProgramação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma Máxima
 
Algoritmos - Vetores
Algoritmos - VetoresAlgoritmos - Vetores
Algoritmos - Vetores
 
Resumo dos testes de convergência
Resumo dos testes de convergênciaResumo dos testes de convergência
Resumo dos testes de convergência
 
Teoria dos Conjuntos
Teoria dos ConjuntosTeoria dos Conjuntos
Teoria dos Conjuntos
 
Matemática Básica
Matemática BásicaMatemática Básica
Matemática Básica
 
Relações
RelaçõesRelações
Relações
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 

Semelhante a Algoritmos Gulosos - Troco Mínimo

4º ano_MAT_Alfa Fichas de Reforço.pdf
4º ano_MAT_Alfa Fichas de Reforço.pdf4º ano_MAT_Alfa Fichas de Reforço.pdf
4º ano_MAT_Alfa Fichas de Reforço.pdfElisabete Cunha
 
Equação do 1º grau
Equação do 1º grauEquação do 1º grau
Equação do 1º grauElyarah Lima
 
TABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptx
TABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptxTABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptx
TABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptxOjr Bentes
 
Proposta de-correccao-do-teste-intermedio-9-ano7-de-fevereiro-de-2011-v1
Proposta de-correccao-do-teste-intermedio-9-ano7-de-fevereiro-de-2011-v1Proposta de-correccao-do-teste-intermedio-9-ano7-de-fevereiro-de-2011-v1
Proposta de-correccao-do-teste-intermedio-9-ano7-de-fevereiro-de-2011-v1Ana Tapadinhas
 
Cálculo Numérico
Cálculo NuméricoCálculo Numérico
Cálculo NuméricoSandro Lima
 
Mat exercicios resolvidos 008
Mat exercicios resolvidos  008Mat exercicios resolvidos  008
Mat exercicios resolvidos 008trigono_metrico
 
Prova de Matemática fuzileiro naval 2011
Prova de Matemática fuzileiro naval 2011Prova de Matemática fuzileiro naval 2011
Prova de Matemática fuzileiro naval 2011thieresaulas
 
11 questões gabaritadas de matemática
11 questões gabaritadas de matemática11 questões gabaritadas de matemática
11 questões gabaritadas de matemáticaLUZIANDERSON RAMOS
 
Analise combinatoria 1
Analise combinatoria 1Analise combinatoria 1
Analise combinatoria 1SEDUC-PA
 
1ª prova gab 1bim 8ano unid 1 numeros 2011
1ª prova gab 1bim 8ano unid 1 numeros 20111ª prova gab 1bim 8ano unid 1 numeros 2011
1ª prova gab 1bim 8ano unid 1 numeros 2011Joelson Lima
 

Semelhante a Algoritmos Gulosos - Troco Mínimo (20)

Fin a01
Fin a01Fin a01
Fin a01
 
4º ano_MAT_Alfa Fichas de Reforço.pdf
4º ano_MAT_Alfa Fichas de Reforço.pdf4º ano_MAT_Alfa Fichas de Reforço.pdf
4º ano_MAT_Alfa Fichas de Reforço.pdf
 
Aula2 equação 1º_
Aula2 equação 1º_Aula2 equação 1º_
Aula2 equação 1º_
 
Fin a01
Fin a01Fin a01
Fin a01
 
Equações de primeiro grau
Equações de primeiro grauEquações de primeiro grau
Equações de primeiro grau
 
Equação do 1º grau
Equação do 1º grauEquação do 1º grau
Equação do 1º grau
 
Equacoes resol
Equacoes resolEquacoes resol
Equacoes resol
 
Gabarito2710
Gabarito2710Gabarito2710
Gabarito2710
 
TABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptx
TABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptxTABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptx
TABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptx
 
Proposta de-correccao-do-teste-intermedio-9-ano7-de-fevereiro-de-2011-v1
Proposta de-correccao-do-teste-intermedio-9-ano7-de-fevereiro-de-2011-v1Proposta de-correccao-do-teste-intermedio-9-ano7-de-fevereiro-de-2011-v1
Proposta de-correccao-do-teste-intermedio-9-ano7-de-fevereiro-de-2011-v1
 
Cálculo Numérico
Cálculo NuméricoCálculo Numérico
Cálculo Numérico
 
Mat exercicios resolvidos 008
Mat exercicios resolvidos  008Mat exercicios resolvidos  008
Mat exercicios resolvidos 008
 
Prova de Matemática fuzileiro naval 2011
Prova de Matemática fuzileiro naval 2011Prova de Matemática fuzileiro naval 2011
Prova de Matemática fuzileiro naval 2011
 
Aritmética de máquina
Aritmética de máquinaAritmética de máquina
Aritmética de máquina
 
15032014
1503201415032014
15032014
 
MentalPost1.pptx
MentalPost1.pptxMentalPost1.pptx
MentalPost1.pptx
 
1705 matemática apostila amostra
1705 matemática   apostila amostra1705 matemática   apostila amostra
1705 matemática apostila amostra
 
11 questões gabaritadas de matemática
11 questões gabaritadas de matemática11 questões gabaritadas de matemática
11 questões gabaritadas de matemática
 
Analise combinatoria 1
Analise combinatoria 1Analise combinatoria 1
Analise combinatoria 1
 
1ª prova gab 1bim 8ano unid 1 numeros 2011
1ª prova gab 1bim 8ano unid 1 numeros 20111ª prova gab 1bim 8ano unid 1 numeros 2011
1ª prova gab 1bim 8ano unid 1 numeros 2011
 

Mais de Gabriel Albuquerque

Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem de Conceitos Nu...
Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem  de Conceitos Nu...Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem  de Conceitos Nu...
Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem de Conceitos Nu...Gabriel Albuquerque
 
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"Gabriel Albuquerque
 
Star Wars e a Cultura da Convergência
Star Wars e a Cultura da ConvergênciaStar Wars e a Cultura da Convergência
Star Wars e a Cultura da ConvergênciaGabriel Albuquerque
 
Cultura Empresarial: Definição e Cases
Cultura Empresarial: Definição e CasesCultura Empresarial: Definição e Cases
Cultura Empresarial: Definição e CasesGabriel Albuquerque
 

Mais de Gabriel Albuquerque (9)

Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem de Conceitos Nu...
Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem  de Conceitos Nu...Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem  de Conceitos Nu...
Eati 2014 - Jogos Cognitivos Eletrônicos para a Aprendizagem de Conceitos Nu...
 
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
Planejamento Estratégico: Livraria Fictícia "Papiros Virtuais"
 
Teoria dos Grafos
Teoria dos GrafosTeoria dos Grafos
Teoria dos Grafos
 
Star Wars e a Cultura da Convergência
Star Wars e a Cultura da ConvergênciaStar Wars e a Cultura da Convergência
Star Wars e a Cultura da Convergência
 
Cultura Empresarial: Definição e Cases
Cultura Empresarial: Definição e CasesCultura Empresarial: Definição e Cases
Cultura Empresarial: Definição e Cases
 
Tecnologia Bluetooth
Tecnologia BluetoothTecnologia Bluetooth
Tecnologia Bluetooth
 
Algoritmo Shell Sort
Algoritmo Shell SortAlgoritmo Shell Sort
Algoritmo Shell Sort
 
WordPress
WordPressWordPress
WordPress
 
OOCSS - Object Oriented CSS
OOCSS - Object Oriented CSSOOCSS - Object Oriented CSS
OOCSS - Object Oriented CSS
 

Algoritmos Gulosos - Troco Mínimo

  • 1. Algoritmos Gulosos Troco Mínimo Gabriel Ramalho Túlio Lemes Vinicius Rodrigues
  • 2. 1.1 Definição do Problema: Dado a necessidade de representar um certo valor (troco) com o menor número de moedas possível, utilizamos algoritmos gulosos para buscar soluções ótimas (o que nem sempre ocorre). Podemos tomar como exemplo eventos da vida real: ● Caixas de bancos e estabelecimentos comerciais freqüentemente trabalham com a tarefa de produzir troco, procurando fazê-la da maneira mais eficiente possível. 1. Motivação
  • 3. Dado os tipos de moedas de um país, determinar o número mínimo de moedas para dar um troco de valor n. 1.2 Descrição Informal:
  • 4. Questão: Dado K denominações de moedas M[k] = { m1 , m2 , m3 ,..., mk }, tal que m1 < m2 < ... < mk e supondo um troco para n, encontre uma solução C[n] = x1 m1 + x2 m2 + ... + xk mk , tal que x1 + x2 + ... + xk seja o menor possível. Entrada: ● M[k] = {m1 , m2 , m3 , …, mk } (conjunto de moedas) ● Valor a ser gerado pelas moedas = n ● Quantidade de moedas = k Saída: Quantidade de moedas utilizadas para gerar o troco. 1.3 Descrição Formal:
  • 5. Suponha que é preciso “dar um troco” de $289,00 e temos disponíveis moedas com valores de 100, 50, 25, 5 e 1 Menor número de moedas possível: 2 de valor 100 1 de valor 50 1 de valor 25 2 de valor 5 4 de valor 1 De forma geral, agimos tal como um algoritmo guloso: em cada estágio adicionamos a moeda de maior valor possível, de forma a não passar da quantia necessária. 1.4 Exemplo:
  • 6. Moedas = {1, 5, 25, 50, 100} Tamanho do Vetor = 5 Troco = 289 Total de Moedas= 0 1.4.1 Exemplo:
  • 7. Tamanho do Vetor = i = 5 ⌊ ( Troco/Moedas[i] ) ⌋ = ⌊ ( 289/100 ) ⌋ = 2 Troco = 289 - ( ⌊ ( 289/100 ) ⌋ * 100) = 289 - 200 = 89 Total de Moedas = ⌊ ( 289/100 ) ⌋ = 2 1.4.1 Exemplo:
  • 8. Tamanho do Vetor = i = 4 ⌊ ( Troco/Moedas[i] ) ⌋ = ⌊ ( 89/50 ) ⌋ = 1 Troco = 89 - ( ⌊ ( 89/50 ) ⌋ * 50) = 89 - 50 = 39 Total de Moedas = 2 + ⌊ ( 89/50 ) ⌋ = 2 + 1 = 3 1.4.1 Exemplo:
  • 9. Tamanho do Vetor = i = 3 ⌊ ( Troco/Moedas[i] ) ⌋ = ⌊ ( 39/25 ⌋ = 1 Troco = 39 - ( ⌊ ( 39/25 ) ⌋ * 25) = 39 - 25 = 14 Total de Moedas = 3 + ⌊ ( 39/25 ) ⌋ = 3 + 1 = 4 1.4.1 Exemplo:
  • 10. Tamanho do Vetor = i = 2 ⌊ ( Troco/Moedas[i] ) ⌋ = ⌊ ( 14/5 ⌋ = 4 Troco = 14 - ( ⌊ ( 14/5 ) ⌋ * 5) = 14 - 10 = 4 Total de Moedas = 4 + ⌊ ( 14/5 ) ⌋ = 4 + 2 = 6 1.4.1 Exemplo:
  • 11. Tamanho do Vetor = i = 1 ⌊ ( Troco/Moedas[i] ) ⌋ = ⌊ ( 4/1 ⌋ = 4 Troco = 4 - ( ⌊ ( 4/1 ) ⌋ * 1) = 4 - 4 = 0 Total de Moedas = 6 + ⌊ ( 4/1 ) ⌋ = 6 + 4 = 10 1.4.1 Exemplo:
  • 12. Mas, nem sempre essa estratégia funciona, por exemplo: Suponha que e preciso “dar um troco” de $20,00 e temos disponíveis moedas com valores de 100, 50, 24, 12, 5, 1 Usando a estratégia anterior: 1 de valor 12 1 de valor 5 3 de valor 1 O que é errado, pois é possível dar um troco utilizando 4 moedas de valor 5. 1.4.2 Exemplo:
  • 13. 2. Algoritmo // d é um vetor com os valores das moedas, ordenado do maior para o menor // k é a quantidade de elementos nesse vetor // n é o valor do troco Função Troco(d, k, n) S <- 0 // número mínimo de moedas (solução ótima) s <- [] // vetor que irá guardar a quantidade de moedas utilizadas para cada valor do vetor S i <- 0 enquanto i < k, faça: s[i] <- ⌊n / d[i]⌋ // divide o troco pelo valor da moeda atual n <- n - s[i] * d[i] // diminui do valor do troco, o valor parcial S <- S + s[i] // incrementa S com a quantidade de moedas utilizadas i <- i + 1 fim enquanto retorne S
  • 14. Quando o método guloso funciona, o algoritmo é, em geral, eficiente. Figurativamente, a solução gulosa consiste em, a cada passo, escolher o melhor pedaço possível e não se arrepender. Para saber se o método guloso funciona, é necessário provar que o algoritmo resolve o problema. 3. Análise do Algoritmo
  • 15. Porque o método funciona para o seguinte conjunto de moedas? M = [1, 5, 10, 25, 50, 100] 3. Análise do Algoritmo
  • 16. 1. A tabela abaixo mostra o máximo de moedas de cada tipo usado em um troco mínimo, pois, para cada aumento nesses valores, existe outra opção com menos moedas. Adicionalmente, não se pode usar simultâneamente 2 moedas de 10 e 1 de 5. 3. Análise do Algoritmo 1 5 10 25 50 100 4 1 2 1 1 ∞
  • 17. 2. O valor máximo conseguido com as moedas tipos 1 a 5 é 99. Logo, qualquer troco x > 99 usa tantas moedas de 100 quanto necessário. 3. O valor máximo conseguido com as moedas tipos 1 a 4 é 49. Logo, qualquer troco x, 100 > x > 49, usa 1 moeda de 50. 4. O valor máximo conseguido com as moedas tipos 1 a 3 é 24. Logo, qualquer troco x, 50 > x > 24, usa 1 moeda de 25. 5.O valor máximo conseguido com as moedas tipos 1 e 2 é 9. Logo, qualquer troco x, 25 > x > 9, usa 1 ou 2 moedas de 10. 3. Análise do Algoritmo
  • 18. 6. O valor máximo conseguido com as moedas do tipo 1 é 4. Logo, todo valor x, 10 > x > 4 usa 1 moeda de 5. Conclusão: o troco mínimo obtido pelas considerações anteriores é exatamente aquele obtido com o algoritmo guloso. Logo, o método guloso funciona corretamente para esse conjunto de moedas. 3. Análise do Algoritmo
  • 19. 3.1 Prova de Corretude: •Consideremos S={s1 ,s2 ,...,sx } um conjunto com todas moedas utilizadas para gerar uma solução ótima obtida a partir do algoritmo, cujas moedas são {1, 5, 25, 50, 100}. • Por contradição, assuma a existência de outra solução chamada S′={s′1 , s′2 ,...,s′y } • S′ possui um menor número de moedas que S. 3. Análise do Algoritmo
  • 20. •q → nº de moedas de um determinado valor em S. •q′ → nº de moedas de um determinado valor em S′. •Usando q(100) e q’(100), e supondo que troco > 100, podemos concluir que: troco = (q(100) * 100) + r, r < 100 •Logo, se considerarmos que q’(100) < q(100): troco = (q’(100) * 100) + r’, r’ >= 100 3.1 Prova de Corretude
  • 21. •Podemos afirmar que esta não é uma solução ótima, pois se r’ é maior que 100, haveria a chance de q’(100) ser acrescido. •Analogamente podemos considerar as quantidades de moedas menores. troco = (q’(100) * 100) + (q’(50) * 50) + ... + (q’(1) * 1) + r’ r’ >= 1 3.1 Prova de Corretude
  • 22. •Isto é absurdo, pois r’ não pode ser maior ou igual a 1 tendo em vista que a soma de todas as moedas utilizadas já equivale ao troco desejado, ou seja: troco = (q’(100) * 100) + (q’(50) * 50) + ... + (q’(1) * 1) •Se considerarmos q = q’, também será uma situação absurda, pois os somatórios das quantidades de moedas de q, e de q’ nunca serão iguais, já que S > S’, ficando provado que S’ não existe. 3.1 Prova de Corretude
  • 23. •Nem sempre é possível afirmar que o algoritmo guloso fornece uma solução ótima, para todos os conjuntos de moedas. Exemplo: • Moedas = {1, 7, 15, 20} Troco = 31 S = {20, 7, 1, 1, 1, 1} •Esta solução não é ótima, pois existe S’ = {15, 15, 1} 3.1 Prova de Corretude
  • 24. O algoritmo possui uma interação de k até 1. Desta forma, a função que representa a complexidade do algoritmo é: Onde c representa uma constante referente aos passos realizados dentro do comando de repetição. Assim, procedendo à análise assintótica do problema temos que: 3. Complexidade
  • 25. Conclusão: Vantagens: ● Rápido e Eficiente ● Simples e de fácil implementação Desvantagens: ● Nem sempre fornece uma solução ótima ● Não reconsidera uma solução tomada Conclusão: ● Complexidade de O(n) ● Programação dinâmica é melhor
  • 26. Bibliografia: ● http://www.ime.uerj.br/~pauloedp/ALGO/Download/ALSLGULO.pdf ● http://www.ic.unicamp.br/~rocha/msc/complex/algoritmosGulososFinal.pdf ● http://wpattern.com/blog/post/2012/03/24/Problema-do-Troco-Analise-de- Algoritmos.aspx ● https://docs.google.com/presentation/d/1LHv2ymwaCh8xeyZ2X170IU- WnCkUBZ75IClAjs0-_XM/edit#slide=id.p32