commencer le tp

This commit is contained in:
2025-05-04 19:56:35 +02:00
parent a8ee3a4989
commit a7b01ee47d

View File

@@ -0,0 +1,89 @@
Videos = {
"Video 1": {"Durée": 114, "Taille": 4.57},
"Video 2": {"Durée": 32, "Taille": 0.63},
"Video 3": {"Durée": 20, "Taille": 1.65},
"Video 4": {"Durée": 4, "Taille": 0.085},
"Video 5": {"Durée": 18, "Taille": 2.15},
"Video 6": {"Durée": 80, "Taille": 2.71},
"Video 7": {"Durée": 5, "Taille": 0.32},
}
def dico_vers_liste(dico: dict) -> list:
"""
Conversion d'un dictionnaire en liste.
PARAM. :
- dico : DICT, dictionnaire à applatir
RESULT. :
- LIST, chaque élément de la liste est un tuple (cle, valeur) du dictionnaire.
PRECOND. :
- aucune
EFFET DE BORD :
- aucun
"""
return list(
dico.items() # j'ai remplacer le code de base qui contenait Videos a la place de dico dans le return
)
def entier_vers_binaire(n: int, taille: int) -> list:
"""
Conversion d'un entier en binaire sur une taille donnée.
PARAM. :
- n : INT, le nombre à convertir
- taille : INT, la taille (nb de bits) fixe de la représentation
RESULT. :
- LIST, la liste des bits de la représentation en binaire,
indexée par le poids
PRECONDITION :
- n < 2**taille : un entier >= 2**taille n'est pas représentable
dans la taille donnée
EFFET DE BORD :
- aucun
"""
assert 2**taille > n, "Taille de représentation trop petite"
bits = [0] * taille
for i in range(taille):
bits[i] = (n >> i) & 1
return bits
def ensemble_des_parties(ensemble: list) -> iterator:
"""
Construit l'itérable enumérant toutes les parties d'un ensemble.
PARAM. :
- ensemble : LIST, la liste des éléments de l'ensemble
RESULT. :
- ITERATOR, le générateur de toutes les parties de l'ensemble
PRECONDITION :
- aucune
EFFET DE BORD :
- aucun
"""
n = len(ensemble)
for mask in range(2**n):
partie = [ensemble[i] for i in range(n) if (mask >> i) & 1]
yield partie
def total_duree(partie):
return sum(elt[1]['Durée'] for elt in partie)
def total_taille(partie):
return sum(elt[1]['Taille'] for elt in partie)
def sac_a_dos_force_brute(videos, capacite):
meilleur = ([], 0, 0.0)
for partie in ensemble_des_parties(videos):
taille = total_taille(partie)
duree = total_duree(partie)
if taille <= capacite and duree > meilleur[1]:
meilleur = ([v[0] for v in partie], duree, taille)
return meilleur
if __name__ == "__main__":
# Conversion du dictionnaire des vidéos en liste
liste_videos = dico_vers_liste(Videos)
# Affichage de contrôle
for video in liste_videos:
print(video)