petite info
67Messages postés
20 mars 2008Date d'inscription
24 mai 2008 à 00:13
Complexité : présentation
Le tri fusion comporte 3 étapes : la division de l'ensemble d'éléments en deux parties, le tri des deux sous-ensembles puis la fusion des deux sous-ensembles triés. Soit un ensemble de n éléments, le coût en nombre d'opérations de la division des deux ensembles est constant dans le cas du tri de tableaux et est de n dans le cas des listes. Le coût du tri des deux sous listes est égal à 2 fois le coût du tri d'une liste de longueur n/2. Enfin, le coût de la fusion des deux sous listes triées est proportionnel au nombre d'éléments à fusionner, c'est à dire en O(n).
Les quelques algorithmes vus jusqu'à maintenant sont en O(n2). D'après les résultats ci dessus, si on note T(n) la complexité du tri fusion pour classer n éléments, on a :
Or, si la complexité du tri fusion était en O(n2), on aurait :
Ce qui est inférieur à n2 dés que n>2. Par conséquent, la complexité du tri fusion n'est pas en O(n2) mais en une valeur bien inférieure.
Complexité : calcul
Pour calculer la complexité du tri fusion, nous avons besoin du résultat suivant (qui ne sera pas démontré ici) :
Soit T(N) une suite vérifiant la relation de récurence suivante : T(N)=aT(N/b)+O(Nc).
Si a < bc alors T(N)=O(Nc)
Si a = bc alors T(N)=O(Nclogb(N))
Si a > bc alors T(N)=O(Nlogb(a))
avec logb le logarithme népérien en base b
Ici, on a (2 = 21), la complexité du tri fusion est donc en O(n*lg(n)) ou lg(n) est le logarithme népérien en base 2.
Remarque: en ce qui concerne le tri de listes, le tri fusion souffre du fait que c'est un algorithme récursif. En effet, pour se dérouler, il doit construire un grand nombre de sous listes, ce qui demande un grand espace mémoire. La complexité en espace mémoire du tri fusion est donc assez handicapante si l'espace mémoire disponible n'est pas assez grand.