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

Análise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaAnálise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaDelacyr Ferreira
 
Números.reais.introdução
Números.reais.introduçãoNúmeros.reais.introdução
Números.reais.introduçãoFilipa Guerreiro
 
BD I - Aula 04 A - Resumo MER e Mapeamento Relacional
BD I - Aula 04 A - Resumo MER e Mapeamento RelacionalBD I - Aula 04 A - Resumo MER e Mapeamento Relacional
BD I - Aula 04 A - Resumo MER e Mapeamento RelacionalRodrigo Kiyoshi Saito
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoDelacyr Ferreira
 
Sequencias
SequenciasSequencias
Sequenciasaasf
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasDelacyr Ferreira
 
Estatísticas: Média, Moda e Mediana
Estatísticas: Média, Moda e MedianaEstatísticas: Média, Moda e Mediana
Estatísticas: Média, Moda e MedianaSminorffa
 
Brincando e Aprendendo com a Matemática Equação
Brincando e Aprendendo com a Matemática EquaçãoBrincando e Aprendendo com a Matemática Equação
Brincando e Aprendendo com a Matemática Equaçãoivanetelimaseixas
 
Medidas de tendência central
Medidas de tendência centralMedidas de tendência central
Medidas de tendência centralpaulocsm
 
MPEMC AULA 3: Sistema de Numeração Decimal
MPEMC AULA 3: Sistema de Numeração DecimalMPEMC AULA 3: Sistema de Numeração Decimal
MPEMC AULA 3: Sistema de Numeração Decimalprofamiriamnavarro
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2Rogerio Oliveira
 
Operações com Números Naturais
Operações com Números NaturaisOperações com Números Naturais
Operações com Números Naturaisrubensdiasjr07
 
Questões de provas e simulados probabilidade e estatística junho 2014
Questões de provas e simulados probabilidade e estatística junho 2014Questões de provas e simulados probabilidade e estatística junho 2014
Questões de provas e simulados probabilidade e estatística junho 2014Nina Silva
 
Aula 02 - Escolha caso
Aula 02 - Escolha casoAula 02 - Escolha caso
Aula 02 - Escolha casoEder Samaniego
 
Banco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoBanco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoLeinylson Fontinele
 

Tendances (20)

Análise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaAnálise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise Assintótica
 
Pequeno teorema de fermat
Pequeno teorema de fermatPequeno teorema de fermat
Pequeno teorema de fermat
 
Números.reais.introdução
Números.reais.introduçãoNúmeros.reais.introdução
Números.reais.introdução
 
BD I - Aula 04 A - Resumo MER e Mapeamento Relacional
BD I - Aula 04 A - Resumo MER e Mapeamento RelacionalBD I - Aula 04 A - Resumo MER e Mapeamento Relacional
BD I - Aula 04 A - Resumo MER e Mapeamento Relacional
 
Análise de Algoritmos
Análise de AlgoritmosAnálise de Algoritmos
Análise de Algoritmos
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método Guloso
 
Aula 09 Medidas de Tendencia Central de Dados Agrupados
Aula 09   Medidas de Tendencia Central de Dados AgrupadosAula 09   Medidas de Tendencia Central de Dados Agrupados
Aula 09 Medidas de Tendencia Central de Dados Agrupados
 
Sequencias
SequenciasSequencias
Sequencias
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de Recorrências
 
Estatísticas: Média, Moda e Mediana
Estatísticas: Média, Moda e MedianaEstatísticas: Média, Moda e Mediana
Estatísticas: Média, Moda e Mediana
 
Brincando e Aprendendo com a Matemática Equação
Brincando e Aprendendo com a Matemática EquaçãoBrincando e Aprendendo com a Matemática Equação
Brincando e Aprendendo com a Matemática Equação
 
Amostragem - estatistica
Amostragem - estatisticaAmostragem - estatistica
Amostragem - estatistica
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Medidas de tendência central
Medidas de tendência centralMedidas de tendência central
Medidas de tendência central
 
MPEMC AULA 3: Sistema de Numeração Decimal
MPEMC AULA 3: Sistema de Numeração DecimalMPEMC AULA 3: Sistema de Numeração Decimal
MPEMC AULA 3: Sistema de Numeração Decimal
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2
 
Operações com Números Naturais
Operações com Números NaturaisOperações com Números Naturais
Operações com Números Naturais
 
Questões de provas e simulados probabilidade e estatística junho 2014
Questões de provas e simulados probabilidade e estatística junho 2014Questões de provas e simulados probabilidade e estatística junho 2014
Questões de provas e simulados probabilidade e estatística junho 2014
 
Aula 02 - Escolha caso
Aula 02 - Escolha casoAula 02 - Escolha caso
Aula 02 - Escolha caso
 
Banco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoBanco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e Especialização
 

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