25-NSIJ1AN1-2

  1. def passer_transit(self):
        self.etat = 'transit'
    
  2. def ajouter_colis(liste, colis):
        if colis.poids <= 25:
            liste.append(colis)
        else:
            print('Dépassement du poids maximal autorisé')
    
  3. def nb_colis(liste):
        return len(liste)
    
  4. def poids_total(liste):
        total = 0
        for c in liste:
            total = total + c.poids
        return total
    
  5. def liste_colis_etat(liste, statut):
        return [c for c in liste if c.etat == statut]
    
  6. La fonction tri_decroissant implémente un tri par sélection de coût \(O(n^2)\) dans le pire des cas.

  7. Le tri fusion, dont le coût est \(O(n \log n)\) dans le pire de cas, aurait pu être utilisé.

  8. def chargement_glouton(liste, rang, capacite):
        if rang == len(liste):
            return []
        elif liste[rang].poids <= capacite:
            return [liste[rang]] + chargement_glouton(liste, rang + 1, capacite - liste[rang].poids)
        else:
            return chargement_glouton(liste, rang + 1, capacite)
    
  9. En python, le nombre d'appels récursifs est limité à 1000 par défaut. Lorsque chargement_glouton dépasse ce seuil, Python affiche cette erreur.

  10. def chargement_glouton2(liste, capacite):
        colis_a_charger = []
        for colis in liste:
            if colis.poids <= capacite:
                colis_a_charger.append(colis)
                capacité -= colis.poids
        return colis_a_charger