Adloun

NSI (terminale) · Chapitre 8 · Exercice de TD

Problème — Comparer glouton et programmation dynamique sur le sac à dos entier

Les algorithmes gloutons · niveau 3 (difficile)

Énoncé

Problème — Comparer glouton et programmation dynamique sur le sac à dos entier.

On veut quantifier l'écart entre le glouton et l'optimum sur le sac à dos entier. Écrire les deux versions et comparer sur un exemple où le glouton échoue.

Corrigé

La version dynamique remplit un tableau dp[i][w] (valeur maximale avec les premiers objets et une capacité ).


def sac_entier_glouton(objets, W):
    objets = sorted(objets, key=lambda o: o[1] / o[0], reverse=True)
    reste, valeur = W, 0
    for poids, val in objets:
        if poids <= reste:
            reste -= poids
            valeur += val
    return valeur

def sac_entier_dynamique(objets, W):
    n = len(objets)
    dp = [[0] * (W + 1) for _ in range(n + 1)]
    for i in range(1, n + 1):
        poids, val = objets[i - 1]
        for w in range(W + 1):
            dp[i][w] = dp[i - 1][w]              # objet i non pris
            if poids <= w:                        # objet i pris
                dp[i][w] = max(dp[i][w], dp[i - 1][w - poids] + val)
    return dp[n][W]

objets = [(10, 60), (20, 100), (30, 120)]
print(sac_entier_glouton(objets, 50))     # 160 (sous-optimal)
print(sac_entier_dynamique(objets, 50))   # 220 (optimal)

Le glouton donne alors que l'optimum est : pour le sac à dos entier, le choix localement optimal (meilleur rapport valeur/poids) ne suffit pas. La programmation dynamique, en , examine toutes les combinaisons utiles et garantit l'optimum, au prix d'une complexité supérieure au du glouton.

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 →