NSI : algorithmes gloutons

Un algorithme est une suite finie et non ambiguë d’instructions et d’opérations permettant de résoudre une classe de problèmes. Le domaine qui étudie les algorithmes est appelé l’algorithmique.

Wikipédia

proposition correction algo rangement

objets=[7,6,3,4,8,5,9,2]
cartons=[[] for i in range(5)]
pds_max=11
 # je prends le premier objet dispo
 # je le range dans le premier carton dispo
 # je recommence jusqu'à ne plus avoir d'objets
 
def rangement(objets):
    '''
    >>>rangement([7,6,3,4,8,5,9,2])
    [[7,3],[6,4],[8,2],[5],[9]]
    '''
    for objet in objets :
        objet_range=False
        for carton in cartons:
            if objet_range==False:
                if sum(carton)+objet<=pds_max:
                # j'ajoute l'objet à mon carton
                    carton.append(objet)
                    objet_range=True
    return cartons

Proposition de correction rendu monnaie

monnaie=[1,2,5,10,20,50,100]
monnaie.reverse()
def rendu_monnaie(prix,somme):
    '''
    >>>rendu_monnaie(21,30)
    [5,2,2]
    >>>rendu_monnaie(12,20)
    [5,2,1]
    '''
    # je calcule la somme a rendre
    # je parcours la monnaie à l'envers
    # dès que je trouve une valeur inférieure ou égale
    # à la somme à rendre
    # je l'ajoute au rendu
    # je l'enleve de la somme a rendre
    # je recommence jusqu'à ne plus avoir rien à rendre
    rendu=[]
    somme_a_rendre=somme-prix
    while somme_a_rendre>0:
        on_continue=True
        for piece in monnaie:
            if on_continue==True:
                if  piece<=somme_a_rendre:
                    rendu.append(piece)
                    somme_a_rendre-=piece
                    on_continue=False
    return rendu
    
    

proposition correction

mes_objets=[[40,12],[30,8],[30,10],[70,13]]

def rangement_sac_a_dos(max):
    '''
    >>>rangement_sac_a_dos(30)
    [[70,13],[40,12]]
    '''
    sac=[]
    poids_sac=0
    objets=mes_objets.copy()
............................    
    # chercher l'objet avec la valeur max
    # si je peux le mettre dans le sac
    # je le mets, et je l'enleve des objets
    # on recommence si possible
    while ....................:
        val_max=objets[0][0]
        for objet in objets:
            if objet[0]>val_max:
                val_max=objet[0]
        if poids_sac+objet[1]<=max:
            sac.append(objet)
            objets.remove(objet)
        else:
           .....................
    return sac