Adloun

NSI (terminale) · Chapitre 7 · Application directe du cours

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

La programmation dynamique · niveau 2

É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.

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →