SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Comparação Sintaxe Portugol vs Java
Comparação Sintaxe Portugol vs JavaComparação Sintaxe Portugol vs Java
Comparação Sintaxe Portugol vs JavaMario Sergio
 
Estudando as sequências numéricas com Fibonacci
Estudando as sequências numéricas com FibonacciEstudando as sequências numéricas com Fibonacci
Estudando as sequências numéricas com FibonacciLeandroJayme
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaodiogoa21
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenaçãoJonas Mendonça
 
Lógica de programação em ppt
Lógica de programação em pptLógica de programação em ppt
Lógica de programação em pptAndrei Bastos
 
Lógica matemática (exercícios resolvidos)
Lógica matemática (exercícios resolvidos)Lógica matemática (exercícios resolvidos)
Lógica matemática (exercícios resolvidos)wilkerfilipel
 
Aula 1 - introdução a fundamentos de computação
Aula 1 - introdução a fundamentos de computaçãoAula 1 - introdução a fundamentos de computação
Aula 1 - introdução a fundamentos de computaçãoSérgio Souza Costa
 
Matemática Discreta - Parte VII estruturas algébricas
Matemática Discreta - Parte VII estruturas algébricasMatemática Discreta - Parte VII estruturas algébricas
Matemática Discreta - Parte VII estruturas algébricasUlrich Schiel
 
HISTÓRIA DA MATEMÁTICA
HISTÓRIA DA MATEMÁTICAHISTÓRIA DA MATEMÁTICA
HISTÓRIA DA MATEMÁTICAgilmar_adv
 
Logica Algoritmo 02 Algoritmo
Logica Algoritmo 02 AlgoritmoLogica Algoritmo 02 Algoritmo
Logica Algoritmo 02 AlgoritmoRegis Magalhães
 

Tendances (20)

Algoritmo aula 01-f
Algoritmo   aula 01-fAlgoritmo   aula 01-f
Algoritmo aula 01-f
 
Comparação Sintaxe Portugol vs Java
Comparação Sintaxe Portugol vs JavaComparação Sintaxe Portugol vs Java
Comparação Sintaxe Portugol vs Java
 
Estudando as sequências numéricas com Fibonacci
Estudando as sequências numéricas com FibonacciEstudando as sequências numéricas com Fibonacci
Estudando as sequências numéricas com Fibonacci
 
Exercicios resolvidos
Exercicios resolvidosExercicios resolvidos
Exercicios resolvidos
 
mod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacaomod4-estruturas-dadosestaticas-ordenacao
mod4-estruturas-dadosestaticas-ordenacao
 
Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de Programação
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Lógica de programação em ppt
Lógica de programação em pptLógica de programação em ppt
Lógica de programação em ppt
 
Equação do 2º grau
Equação do 2º grauEquação do 2º grau
Equação do 2º grau
 
Matemática - PA e PG
Matemática - PA e PGMatemática - PA e PG
Matemática - PA e PG
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Lógica matemática (exercícios resolvidos)
Lógica matemática (exercícios resolvidos)Lógica matemática (exercícios resolvidos)
Lógica matemática (exercícios resolvidos)
 
Aula01 - Logica de Programação
Aula01 - Logica de ProgramaçãoAula01 - Logica de Programação
Aula01 - Logica de Programação
 
Aula analise algoritmos
Aula analise algoritmosAula analise algoritmos
Aula analise algoritmos
 
Aula 1 - introdução a fundamentos de computação
Aula 1 - introdução a fundamentos de computaçãoAula 1 - introdução a fundamentos de computação
Aula 1 - introdução a fundamentos de computação
 
Matemática Discreta - Parte VII estruturas algébricas
Matemática Discreta - Parte VII estruturas algébricasMatemática Discreta - Parte VII estruturas algébricas
Matemática Discreta - Parte VII estruturas algébricas
 
notacao cientifica.pdf
notacao cientifica.pdfnotacao cientifica.pdf
notacao cientifica.pdf
 
HISTÓRIA DA MATEMÁTICA
HISTÓRIA DA MATEMÁTICAHISTÓRIA DA MATEMÁTICA
HISTÓRIA DA MATEMÁTICA
 
Conceitos e simulação de cadeias de markov
Conceitos e simulação de cadeias de markovConceitos e simulação de cadeias de markov
Conceitos e simulação de cadeias de markov
 
Logica Algoritmo 02 Algoritmo
Logica Algoritmo 02 AlgoritmoLogica Algoritmo 02 Algoritmo
Logica Algoritmo 02 Algoritmo
 

Similaire à Algoritmos Gulosos para Troco Mínimo (40

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
 

Similaire à Algoritmos Gulosos para Troco Mínimo (40 (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
 

Plus 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
 
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
 
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
 

Plus de Gabriel Albuquerque (11)

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
 
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
 
Tecnologia Bluetooth
Tecnologia BluetoothTecnologia Bluetooth
Tecnologia Bluetooth
 
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
 
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 para Troco Mínimo (40

  • 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