Mini-projets algorithmique, corrigé TP KNN, news, notebooks IA
This commit is contained in:
92
algorithmes/mini-projets/08_course_algos/starter.py
Normal file
92
algorithmes/mini-projets/08_course_algos/starter.py
Normal file
@@ -0,0 +1,92 @@
|
||||
# Projet 08 — La Course des Algorithmes
|
||||
# Comparer les performances du tri par insertion et du tri par sélection
|
||||
|
||||
import random
|
||||
import time
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Étape 1 : recopie ici tes deux fonctions de tri
|
||||
# -------------------------------------------------------
|
||||
|
||||
def tri_insertion(tab):
|
||||
# TODO : recopier depuis le cours
|
||||
pass
|
||||
|
||||
def tri_selection(tab):
|
||||
# TODO : recopier depuis le cours
|
||||
pass
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Outils de mesure (déjà fournis)
|
||||
# -------------------------------------------------------
|
||||
|
||||
def mesurer_temps(fonction, tab):
|
||||
"""
|
||||
Mesure le temps d'exécution de fonction(tab) en millisecondes.
|
||||
Travaille sur une copie pour ne pas modifier l'original.
|
||||
"""
|
||||
copie = tab[:]
|
||||
debut = time.time()
|
||||
fonction(copie)
|
||||
fin = time.time()
|
||||
return round((fin - debut) * 1000, 3) # résultat en ms
|
||||
|
||||
def generer_liste(n, mode="aleatoire"):
|
||||
"""
|
||||
Génère une liste de n entiers selon le mode :
|
||||
- "aleatoire" : ordre aléatoire
|
||||
- "trie" : déjà triée (croissant)
|
||||
- "inverse" : triée à l'envers (décroissant)
|
||||
"""
|
||||
if mode == "aleatoire":
|
||||
return random.sample(range(n * 10), n)
|
||||
elif mode == "trie":
|
||||
return list(range(n))
|
||||
elif mode == "inverse":
|
||||
return list(range(n, 0, -1))
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Étape 3 : tableau comparatif selon la taille
|
||||
# -------------------------------------------------------
|
||||
|
||||
def comparer_tailles():
|
||||
tailles = [100, 500, 1000, 2000, 5000]
|
||||
print("=== Comparaison par taille (liste aléatoire) ===\n")
|
||||
print(f" {'n':>6} {'Insertion (ms)':>16} {'Sélection (ms)':>16} {'Vainqueur':>10}")
|
||||
print(" " + "-" * 55)
|
||||
|
||||
for n in tailles:
|
||||
liste = generer_liste(n, "aleatoire")
|
||||
t_insertion = mesurer_temps(tri_insertion, liste)
|
||||
t_selection = mesurer_temps(tri_selection, liste)
|
||||
vainqueur = "Insertion" if t_insertion < t_selection else "Sélection"
|
||||
print(f" {n:>6} {t_insertion:>16.3f} {t_selection:>16.3f} {vainqueur:>10}")
|
||||
print()
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Étape 4 : tableau comparatif selon le mode (n fixé)
|
||||
# -------------------------------------------------------
|
||||
|
||||
def comparer_modes(n=1000):
|
||||
modes = ["aleatoire", "trie", "inverse"]
|
||||
print(f"=== Comparaison par configuration (n = {n}) ===\n")
|
||||
print(f" {'Mode':<12} {'Insertion (ms)':>16} {'Sélection (ms)':>16} {'Vainqueur':>10}")
|
||||
print(" " + "-" * 60)
|
||||
|
||||
for mode in modes:
|
||||
liste = generer_liste(n, mode)
|
||||
t_insertion = mesurer_temps(tri_insertion, liste)
|
||||
t_selection = mesurer_temps(tri_selection, liste)
|
||||
vainqueur = "Insertion" if t_insertion < t_selection else "Sélection"
|
||||
print(f" {mode:<12} {t_insertion:>16.3f} {t_selection:>16.3f} {vainqueur:>10}")
|
||||
print()
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Programme principal
|
||||
# -------------------------------------------------------
|
||||
|
||||
comparer_tailles()
|
||||
comparer_modes(n=1000)
|
||||
|
||||
print("Conclusion :")
|
||||
print(" TODO : écris tes observations ici")
|
||||
Reference in New Issue
Block a user