Travaux pratiques 5 : Les algorithmes de tri

publicité
HLPH609
Programmation pour la physique , Faculte des Sciences de Montpellier, 2016
Travaux pratiques 5 : Les algorithmes de tri
Exercice 5.1 : Analyse de la complexite
La fonction suivante teste si un nombre n est premier par des essais successives de division.
Examiner le code, comprendre comment il fonctionne, et analyser la complexite de cette
methode dans le pire cas.
def est_premier (n):
k = 2
while k **2 <= n:
if n % k == 0:
return False
k += 1
return True
Exercice 5.2 : Tri rapide
(a) Derouler a la main l'algorithme du tri rapide sur le tableau [15, 4, 2, 8, 23, 17,
0, 11].
(b) Realiser les fonctions echange(li, i, j), partition(li, l, r) et
tri_rapide(li, l, r) decrites en cours.
(c) Appliquer votre implementation du tri rapide au tableau ci-dessus.
(d) Montrer que la complexite du tri rapide dans le pire cas (pivot = premier element,
liste deja triee) est quadratique.
(e) Modier votre code de la sorte que le pivot est choisi par hasard, en utilisant la fonction
random.randrange().
Exercice 5.3 : Tri fusion
Derouler a la main l'algorithme de tri fusion sur le tableau [15, 4, 2, 8, 23, 17, 0, 11].
Exercice 5.4 : La complexite des algorithmes de tri
(a) La complexite du tri fusion est O(n log n) en tous cas. Assurez-vous de la dierence
entre les algorithmes O(n2 ) et O(n log n) : Generez des listes de 1 000, 10 000 et
100 000 entiers aleatoires et triez-les (sans rien acher) avec le tri fusion ou avec le
tri rapide. Puis, essayez de faire pareil avec le tri par insertion.
(b) Un algorithme de tri qui n'est pas applique en pratique, pour des raisons evidentes, est
le bogosort (\tri stupide") : Aleatoirement rearranger tous les elements, puis verier
s'ils sont par hasard dans la bonne ordre, et sinon, repeter. Determiner la complexite
en moyenne du tri stupide.
Téléchargement