Sac à dos
Dans ce problème on modélise chaque objet par un dictionnaire qui contient 3 clés:
nom: le nom de l'objet,poids: le poids de l'objet,valeur: la valeur de l'objet,
Exemple
{"nom":"A","valeur":150,"poids":12}
Définir une fonction
et qui renvoie l'objet après lui avoir ajouter la clé
set_ratio qui prend en paramètre : objet un objet (c'est
à dire un
dictionnaire défini comme ci-dessus)
et qui renvoie l'objet après lui avoir ajouter la clé
ratio qui
est le quotient \dfrac{\text{valeur}}{\text{poids}}
Exemple
objet = {"nom":"A","valeur":150,"poids":12}
objet = set_ratio(objet)
print(objet)
{"nom":"A","valeur":150,"poids":12,"ratio":"12.5"}
Définir la fonction
et qui renvoie la valeur de clé
get_ratio qui prend en paramètre :
objet un dictionnaire représant un objet.
et qui renvoie la valeur de clé
ratio si elle est présente et 0 sinon.
On s'intérresse maintenant à un tableau d'objets ().
Définir la fonction
et qui renvoie ce même tableau avec pour chaque dictionnaire (objet) l'ajout de la clé
On pourrat utiliser la fonction
set_ratio_liste qui prend en paramètre objets : (list): un tableau de dictionnaires représentant des objets (clé :
nom, valeur et poids).
et qui renvoie ce même tableau avec pour chaque dictionnaire (objet) l'ajout de la clé
ratio.
On pourrat utiliser la fonction
set_ratio
On s'intérresse toujours à une liste d'objets mais aussi au sac à dos.
Pour implementer l'algorithme du sac à dos avec un poids maximum passer en paramètre
Pour implementer l'algorithme du sac à dos avec un poids maximum passer en paramètre
Définir la fonction
Remarque : Pour classer une liste de dictionnaire suivant la clé
Exemple :
sac_a_dos qui prend en paramètres :
-
objets(list): un tableau de dictionnaires représentant des objets (clé :nom, valeur et poids). poids_max(float):: un nombre qui représente le poids maximum que l'on peut mettre dans le sac à dos.
tableau contenant le noms d'objet qui permet d'avoir la valeur maximale sans
dépasser le poids autorisé.
Remarque : Pour classer une liste de dictionnaire suivant la clé
ratio par ordre
décroissant, on utilise les paramètres key et reverse. Exemple
liste = [{'nom': 'V', 'valeur': 580, 'poids': 46, 'ratio': 12.608695652173912}, {'nom': 'R', 'valeur': 220, 'poids': 24, 'ratio': 9.166666666666666}, {'nom': 'T', 'valeur': 970, 'poids': 34, 'ratio': 28.529411764705884}]
liste.sort(key=get_ratio, reverse=True)
Exemple :
>>> print(sac_a_dos([
{"nom":"A","valeur":150,"poids":12},
{"nom":"B","valeur":100,"poids":20},
{'nom': 'V', 'valeur': 580, 'poids': 46},
{'nom': 'R', 'valeur': 220, 'poids': 24},
{'nom': 'T', 'valeur': 970, 'poids': 34}],68))
['T', 'A', 'B']
Bravo !!!
Tu viens de résoudre le problème du sac à dos à l'aide d'un algorithme glouton.
Badge
algorithme glouton
Initié