Adloun

Sac à dos fractionnaire détaillé

Application directe du cours · niveau 2 · NSI (terminale), chapitre 8 — Les algorithmes gloutons

Énoncé

Sac à dos fractionnaire détaillé.

Modifier la fonction du sac fractionnaire pour qu'elle renvoie aussi la liste des fractions prises pour chaque objet.

Corrigé


def sac_fractionnaire_detail(objets, capacite):
    objets = sorted(objets, key=lambda o: o[1] / o[0], reverse=True)
    reste = capacite
    choix = []          # (poids, valeur, fraction)
    valeur_totale = 0.0
    for poids, valeur in objets:
        if reste <= 0:
            break
        fraction = min(1.0, reste / poids)
        choix.append((poids, valeur, fraction))
        valeur_totale += valeur * fraction
        reste -= poids * fraction
    return valeur_totale, choix

v, c = sac_fractionnaire_detail([(10, 60), (20, 100), (30, 120)], 50)
print(v)   # 240.0
print(c)   # [(10, 60, 1.0), (20, 100, 1.0), (30, 120, 0.666...)]

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.