Adloun

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

Sac à dos fractionnaire détaillé

Les algorithmes gloutons · niveau 2

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

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 →