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
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 8 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
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.