Lição
A teoria — Troco em moedas: método guloso contra solução ótima
O problema do troco consiste em encontrar o menor número de moedas que perfaz uma dada quantia, partindo de um conjunto de denominações e admitindo qualquer quantidade de cada uma. O algoritmo guloso escolhe repetidamente a maior moeda que não excede o valor em falta. A programação dinâmica resolve o problema de forma exata, calculando primeiro todas as quantias menores: M(0) = 0 e M(a) = 1 + min M(a − c) para as moedas c ≤ a. Um sistema de moedas em que o método guloso é ótimo para todas as quantias chama-se canónico.
O que significa cada símbolo
M(a)- o menor número de moedas que perfaz a quantia a; é o número na célula a da tabela
G(a)- o número de moedas que o método guloso usa para a
cₘ, cₘ₋₁- a maior e a segunda maior moeda; se existir uma primeira quantia em que o método guloso perde, ela é inferior à soma de ambas
- Pressupõe
- Pressupõe-se uma quantidade ilimitada de cada moeda, denominações inteiras e o número de moedas como único custo. Uma caixa registadora sem florins coloca outro problema. O limite exige uma moeda de 1; sem ela, algumas quantias são impossíveis de pagar e o método guloso pode ficar aquém de uma quantia que a tabela consegue pagar.
Problema resolvido na íntegra
-
Que terceira moeda se pode juntar a 1 e 5? 3 passos
Um país tem moedas de 1 e 5 e pretende criar uma terceira, d, com valor entre 6 e 30. Para que valores de d será sempre ótimo o método guloso? A página testa um sistema de cada vez, mas a regra de Kozen e Zaks para três moedas decide os 25 casos de uma só vez. Prima 1, 3, 4 para experimentar primeiro a regra num sistema já testado pela página.
Abrir este problema na ferramenta
-
Para moedas 1 < c < d, a regra é esta: escreva d = qc + r, com 0 ≤ r < c. O sistema falha em algum caso se e somente se 0 < r < c − q. Para 1, 3, 4, temos d = 4 = 1 × 3 + 1, logo q = 1 e r = 1; verifica-se 0 < 1 < 2. O sistema falha, e a página encontra a primeira falha em 6:
-
Agora c = 5, portanto d = 5q + r e o teste é 0 < r < 5 − q. Quanto maior for q, menos valores possíveis restam para r:
-
Para q = 1 (d de 6 a 9), r pode ser 1, 2 ou 3, pelo que d = 6, 7 e 8 falham. Para q = 2 (10 a 14), r = 1 ou 2: falham 11 e 12. Para q = 3 (15 a 19), só r = 1: falha 16. A partir de q = 4, 5 − q é 1 ou menos e nenhum valor de r satisfaz a condição:
Resposta
Falham seis valores: 6, 7, 8, 11, 12 e 16. Os outros dezanove funcionam, incluindo todos os valores de d entre 17 e 30. Introduza
1, 5, 12para observar um dos seis casos: o método guloso paga 15 com 12 + 1 + 1 + 1, quatro moedas, quando bastam três moedas de cinco. -
Percurso de aprendizagem
Por que razão um algoritmo está correto
Referências (3)
- The bound the page draws as a dashed line and settles every system with: if greedy is ever beaten, the smallest amount where it is beaten lies strictly between c₃ + 1 and cₘ + cₘ₋₁; the three-coin rule the worked problem uses; the {1, 3, 4} example and the US system 1, 5, 10, 25, 50, 100 as canonical: D. Kozen and S. Zaks, "Optimal bounds for the change-making problem." Theoretical Computer Science 123(2), 1994, pp. 377-388. DOI 10.1016/0304-3975(94)90134-1
- The pre-decimal coins and their values in pence (threepence, sixpence, shilling of 12d, florin of two shillings, half-crown of two shillings and sixpence, crown of five shillings), and the halfpenny's end as legal tender on 31 July 1969: Wikipedia contributors, "£sd", Wikipedia, The Free Encyclopedia, accessed 3 October 2026.
- Which coins made up the circulating set at the end, as the Royal Mint itself issued them in 1970: half-crown, florin, shilling, sixpence, threepence, penny and halfpenny: The Royal Mint, "1970 Pre-Decimal UK Proof Set", product description, accessed 3 October 2026.