NSI : algorithmes gloutons

proposition correction algo rangement

objets=[3,7,6,3,4,8,5,9,2,2]
carton_max=11
nbre_cartons=5

# avec boucles for
def rangement(objets):
    '''
    >>>rangement(objets)
    [[3, 7], [6, 3, 2], [4, 5, 2], [8], [9]]
    '''
    cartons=[[] for i in range(nbre_cartons)]
    for objet in objets:
        ranger=False
        for carton in cartons:
            if ranger==False:
                poids_carton=0
                for obj in carton:
                    poids_carton+=obj
                if poids_carton+objet<=carton_max:
                    carton.append(objet)
                    ranger=True
        print(cartons)
    return cartons



# avec boucles while


def rangement2(objs):
    objets=objs.copy()
    cartons=[[] for i in range(nbre_cartons)]
    while objets!=[]:
        objet=objets[0]
        carton_dispo=False
        i=0
        while carton_dispo==False:
            # on cherche un carton dispo
            carton=cartons[i]
            poids=0
            for obj in carton:
                poids+=obj
            if poids+objet<=carton_max:
                carton.append(objet)
                objets.remove(objet)
                carton_dispo=True
            else:
                i+=1
        print(cartons)
    return cartons
            
            
        
        



    
    
# correction algo du kp
poids_max=30
# objets valeur et poids
objets=[[70,13],[40,12],[30,8],[30,10]]

def calcul_densite(objets):
    '''
    >>>calcul_densite(objets)
    [5.4,3.3,3.7,3]
    '''
    densite=[]
    for val in objets:
        d=round(val[0]/val[1],1)
        densite.append(d)
    return densite
    
def classe_densite_decroissant(objets):
    '''
    >>>classe_densite_decroissant(objets)
    [[70,13],[30,8],[40,12],[30,12]]
    '''
    obj_classes=[]
    obj_a_classer=objets.copy()
    densites=calcul_densite(objets)
    # tant qu'il y a des objets à classer
    while len(obj_a_classer)>0:
        # je cherche la densite la plus elevée et son indice
        d_max=densites[0]
        i_max=0
        for i in range(len(densites)):
            if densites[i]>d_max:
                d_max=densites[i]
                i_max=i
        # vous ajoutez l'objet correspondant aux objets classés
        obj_classes.append(obj_a_classer[i_max])
    # vous supprimez la densite max  et l'objet
        del densites[i_max]
        del obj_a_classer[i_max]
    return obj_classes
    

    

def kp(objets):
    '''
    applique la methode du kp aux objets
    >>>kp(objets)
    [[70,13],[30,8]]
    '''