UE J1MI2013 : Algorithmes et Programmes DS Terminal, Ann´ee 2013/2014
Solution:
Les complexit´es sont :
– en temps en Ω(1),O(log2(n)) avec n=longueur(T),
– en espace en Θ(1).
vi. (4 points) L’algorithme entasser(T,i,limite) ´echange des valeurs du tableau de haut en bas, en
suivant une branche de l’arborescence. Cela a pour effet de faire descendre des petites valeurs, et de
faire monter les grandes valeurs. Il est donc possible de construire un tas, en it´erant cet algorithme sur
les indices d´ecroissants du tableau.
En utilisant entasserRecursif(T,i,limite) ou entasser(T,i,limite), ´ecrire un programme Python
ou un algorithme construireTas(T) qui transforme un tableau en un tas.
Solution:
def construireTas(T):
#f o r i in rang e ( le n (T)−1 , −1 , −1): p e ut e t r e o p t i m i s e en
for iin ra nge ( ( l e n (T) −1)//2 , −1 , −1):
e n t a s s e r (T, i , le n (T) )
vii. (1 point) Donner les complexit´es en temps et en espace (meilleur des cas et pire des cas) de votre
algorithme construireTas(T).
Solution:
Si l’on utilise l’algorithme it´eratif pour entasser, les complexit´es sont :
– en temps en Ω(n) si Test d´ej`a un tas, O(n×log2(n)) avec n=longueur(T),
– en espace en Θ(1).
(c) Tri d’un tas.
Le but de cette partie de l’exercice est d’effectuer la transformation repr´esent´ee par la figure 4.
[0] : 9
[1] : 5
[3] : 2
[7] : 0
[4] : 1
[2] : 6
[5] : 5 [6] : 1
(a) Tas initial
[0] : 0
[1] : 1
[3] : 2
[7] : 9
[4] : 5
[2] : 1
[5] : 5 [6] : 6
(b) Vue arborescente du tableau tri´e
Figure 4 – Tri d’un tas
i. (4 points) Dans un tas, la valeur maximale est `a la racine de l’arborescence, donc en T[0]. Dans le
tableau tri´e, cette valeur doit ˆetre en T[len(T)-1]. Il suffit donc d’´echanger ces deux valeurs pour
progresser vers la solution. Une fois cette ´echange fait, si l’on exclut la derni`ere valeur du tableau, le tas
est peu chang´e. En fait entasser(T,0,len(T)-1) va cr´eer un nouveau tas pour les valeurs du tableau
dont les indices sont inf´erieurs `a limite = len(T)-1. Il suffit donc d’it´erer ces deux ´etapes (´echange,
entasser) pour trier un tas.
´
Ecrire un programme Python ou un algorithme trierTas(T) qui transforme un tas en un tableau tri´e
en ordre croissant.
Solution:
def t r i e r T a s (T ) :
for iin ra nge ( l e n (T) −1 ,0 , −1):
echange (T, 0 , i )
e n t a s s e r (T, 0 , i )
Page 4 sur 7