Académique Documents
Professionnel Documents
Culture Documents
Data Sorting
1. Problème
Entrée:
L une liste d’éléments dans un ensemble ordonné.
Sortie
Une liste triée contenant les mêmes éléments que L
Exemple:
L = [2, 4, 5, 3, 1]
L = [1, 4, 5, 3, 2]
L = [1, 2, 5, 3, 4]
L = [1, 2, 3, 5, 4]
Alors :
• On suppose que les plus petits éléments sont triés à leur place dé nitive
Le tri est stable c’est à dire les positions de deux éléments égaux ne sont pas modi ées.
Le tri se termine est la boucle se répète un nombre limite de fois et que minimum termine aussi.
1
fi
fi
fi
Complexité:
O(n)
Si l’entrée est de taille n alors l’algorithme e ectue un nombre d’opérations élémentaires donné
par n:
∃K, n bOp ≤ Kn
Donc (n + 1)(n + 2) = n 2 + n − 2
Donc O(n 2 )
Rigoureusement:
À la i ieme
Principe :
Propriété:
- En place
- Stable
n−1
2i = O(n 2)
∑
Et on répète pour les n élements de la liste.
i=0
2
ff
ff
3. Tris récursifs
- Combiner: On combine les deux solutions pour obtenir la solution au problème initial
A. Tri Fusion
Stratégie
Fonction Fusion
Programme:
def tri_fusion(L):
if len(L) <= 1:
return L
else:
L1 = L[:len(L)//2]
L2 = L[len(L)//2:]
Le slicing crée de nouvelles listes, le tri n’est pas en place (on a ajouté n cases mémoires).
Soit n=len(L): C(n) la complexité de tri fusion sur une liste de taille n.
n n n n
C(n) = O(n) + 2.C( ) = 2(2C( ) + o( )) + O(n) = 8C( ) + 3o(n)
2 4 2 8
Et C(0) = C(1) = 2
Si n= 2k
Pas
C(n) = 2kC(1) + kO(n) = 2n + log2(n)O(n)
RIGOUREUX
def partition(L,g,d):
pivot = L[g]
m = g
for i in range(g+1,d):
3
ff
if L[i] < pivot:
m += 1
if i > m:
if m > g:
return m
def tri_rapide(L):
def aux(g,d):
if g < d-1
m = partition(L,g,d)
aux(g,m)
aux(m+1,d)
aux(O,len(L))
partition(L, o, len(L)) renvoie l’indice de l’élément pivot tel que après l’algorithme, les
éléments d’indices i < m sont inférieurs au pivot. Et les éléments d’indice i > m sont
supérieurs au pivot
A la n, le pivot est bien placé. Les indices g et d permettent de ne pas recopier la liste
a n que le tri soit en place. Il n’est pas stable.
Complexité de partition:
Au total, dans le pire cas: 2(d − g − 1) i.e linéaire en la taille de la liste qu’on parcours.
Complexité de tri-rapide:
Dans le pire cas: on obtient une liste de taille d − g − 1et une de taille 0
n
k = O(n 2)
∑
k=0
d−g−1
Dans le meilleur cas: 2 listes de taille , si n = len(L) et C(n) est la complexité de
2
n−1 n−1
tri rapide sur L: C(n) = C(⌊ ⌋) + C(⌈ ⌉)
2 2
aux(g,m) aux(n+1,d)
4
fi
fi
Bulle On échange un Stable En place O(n 2 ) où n = len(L)
élément et son
voisin si celui-ci
plus grand que ce
dernier