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 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 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 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
    Définir la fonction 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.
    et qui renvoie un 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é
    Editeur + Tableau blanc Document