Rendu optimal exhaustif
Exercice · OCaml (option informatique), chapitre 12 — Algorithmes gloutons
Énoncé
Écrire rendu_min pieces montant qui calcule le nombre minimal de pièces (système quelconque, pièces illimitées), par exploration récursive.
Corrigé
let rec rendu_min pieces montant =
if montant = 0 then 0
else begin
let infini = montant + 1 in (* borne : jamais plus de 'montant' pièces (pièce 1) *)
let meilleur = ref infini in
let rec essaie l =
match l with
| [] -> ()
| p :: reste ->
if p <= montant then begin
let r = rendu_min pieces (montant - p) in
if 1 + r < !meilleur then meilleur := 1 + r
end;
essaie reste
in
essaie pieces;
!meilleur
end
On essaie chaque pièce comme premier choix, et l'on garde le meilleur sous-rendu : c'est l'optimum, mais au prix d'une explosion (le même montant est recalculé maintes fois — la mémoïsation du chapitre 8, ou la programmation dynamique du chapitre suivant, y remédient).
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.