Algorithmes de tri
-
Programmer une fonction
tri_naif(l)
qui prend en argument une liste et renvoie une liste contenant les mêmes éléments rangés dans l’ordre croissant. On ne cherchera pas à optimiser la complexité de la fonction. -
Programmer une fonction
fusion(l1, l2)
qui prend en argument deux listes triées, et renvoie une liste triée qui est l’union des deux listes. On cherchera à réaliser cette opération en complexité linéaire. -
En utilisant la fonction
fusion
, écrire une fonctiontri_fusion(l)
, qui prend en argument une liste et renvoie une liste contenant les même éléments rangés dans l’ordre croissant. La fonction procèdera de manière récursive en découpant la liste en deux, en triant chaque moitié, puis en fusionnant les deux listes ainsi triées. Quel est la complexité de cet algorithme ? -
Charger le fichier popMen.txt ou popWomen.txt. Pour charger un fichier, on pourra utiliser la fonction
open()
, et la clausewith … as …
dont la syntaxe estoù
'chemin/vers/popWomen.txt'
doit remplacé par l’adresse du fichier dans votre ordinateur. Le ficher est alors accessible via la variable file. -
Convertir le contenu du fichier en une liste de nombres flottants. On pourra utiliser les méthodes ou fonctions Python suivantes :
read
,split
,map
etfloat
. -
Comparer les temps d’exécution de la fonction
tri_naif
ettri_fusion
sur la liste de nombre obtenue. Pour mesure le temps d’exécution, on pourra utiliser le packagetime
. Par exemple dans le code suivant :La variable
duree
contient la durée d’exécution en seconde des instructions qui se situent entre les deux appels de la fonctiontime.time()
. -
Comparer le temps d’exécution de la fonction
tri_fusion
avec la méthodesort
fournie par Python. Attention : l’appel de la méthodel.sort()
modifie la listel
elle-même (on parle de modification en place), et non une copie de la liste.