Adloun

Problème — Comparaison glouton / dynamique sur le rendu de monnaie

Application directe du cours · niveau 2 · NSI (terminale), chapitre 7 — La programmation dynamique

Énoncé

Problème — Comparaison glouton / dynamique sur le rendu de monnaie.

On veut illustrer concrètement que l'algorithme glouton peut échouer là où la programmation dynamique réussit. On considère le système de pièces [1, 3, 4] et la somme .

Corrigé

L'algorithme glouton choisit d'abord la plus grosse pièce , soit , puis deux pièces de : il rend , soit 3 pièces. La programmation dynamique trouve la solution optimale , soit 2 pièces. Voici les deux approches comparées :


def rendu_glouton(pieces, somme):
    pieces = sorted(pieces, reverse=True)
    nb, reste = 0, somme
    for p in pieces:
        nb += reste // p
        reste = reste % p
    return nb if reste == 0 else -1

def rendu_dynamique(pieces, somme):
    INFINI = float('inf')
    table = [0] + [INFINI] * somme
    for s in range(1, somme + 1):
        for p in pieces:
            if p <= s:
                table[s] = min(table[s], table[s - p] + 1)
    return table[somme] if table[somme] != INFINI else -1

# rendu_glouton([1, 3, 4], 6)   -> 3 (sous-optimal)
# rendu_dynamique([1, 3, 4], 6) -> 2 (optimal)

Cet exemple montre que le glouton () est plus rapide mais peut être sous-optimal, tandis que la programmation dynamique () garantit toujours l'optimum.

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.