Tri fusion

Structures de données et algorithmes en Python

Miriam Antona

Software engineer

Tri fusion

  • Suit la stratégie diviser pour régner
    • Diviser
      • scinde le problème en sous-problèmes plus petits
    • Régner
      • résout récursivement les sous-problèmes
    • Combiner
      • combine les solutions des sous-problèmes pour obtenir la solution finale
Structures de données et algorithmes en Python

Tri fusion – en action

Schéma d'une liste avec des nombres non ordonnés.

Structures de données et algorithmes en Python

Tri fusion – en action

Schéma d'une liste avec des nombres non ordonnés. La liste a été divisée en deux parties.

Structures de données et algorithmes en Python

Tri fusion – en action

Schéma d'une liste avec des nombres non ordonnés. La liste a été divisée en deux. Deux nouvelles listes : la première contient la moitié gauche de la liste d'origine et la seconde, la moitié droite.

Structures de données et algorithmes en Python

Tri fusion – en action

Schéma d'une liste avec des nombres non ordonnés. Les nouvelles listes ont été divisées en deux.

Structures de données et algorithmes en Python

Tri fusion – en action

Schéma d'une liste avec des nombres non ordonnés. Nouvelles listes issues des dernières divisions.

Structures de données et algorithmes en Python

Tri fusion – en action

Schéma d'une liste avec des nombres non ordonnés. Les nouvelles listes ont été divisées en deux.

Structures de données et algorithmes en Python

Tri fusion – en action

Schéma d'une liste avec des nombres non ordonnés. Nouvelles listes issues des dernières divisions.

Structures de données et algorithmes en Python

Tri fusion – en action

Schéma d'une liste avec des nombres non ordonnés. Les nouvelles listes ont été divisées en deux.

Structures de données et algorithmes en Python

Tri fusion – en action

Schéma d'une liste avec des nombres non ordonnés. Les nouvelles listes ont été divisées en deux.

Structures de données et algorithmes en Python

Tri fusion – en action

Schéma d'une liste avec des nombres non ordonnés. Les éléments des dernières listes divisées ont été triés.

Structures de données et algorithmes en Python

Tri fusion – en action

Schéma d'une liste avec des nombres non ordonnés. Les éléments des dernières listes divisées ont été fusionnés et ordonnés.

Structures de données et algorithmes en Python

Tri fusion – en action

Schéma d'une liste avec des nombres non ordonnés. Les éléments des dernières listes divisées ont été fusionnés et ordonnés.

Structures de données et algorithmes en Python

Tri fusion – en action

Schéma d'une liste avec des nombres non ordonnés. Les éléments des dernières listes divisées ont été fusionnés et ordonnés. Tous les éléments sont triés.

Structures de données et algorithmes en Python

Tri fusion – implémentation

def merge_sort(my_list):
  if len(my_list) > 1:

mid = len(my_list)//2 left_half = my_list[:mid] right_half = my_list[mid:]
merge_sort(left_half) merge_sort(right_half)
i = j = k = 0
while i < len(left_half) and j < len(right_half):
if left_half[i] < right_half[j]:
my_list[k] = left_half[i]
i += 1
else:
my_list[k] = right_half[j]
j += 1
k += 1
    while i < len(left_half):

my_list[k] = left_half[i] i += 1 k += 1
while j < len(right_half): my_list[k] = right_half[j] j += 1 k += 1
my_list = [35,22,90,4,50,20,30,40,1]
merge_sort(my_list)
print(my_list)
[1, 4, 20, 22, 30, 35, 40, 50, 90]
Structures de données et algorithmes en Python

Tri fusion – complexité

  • Pire cas : $O(n\log{}n)$
    • nette amélioration sur le tri à bulles, par sélection et par insertion
    • convient au tri de grandes listes
  • Cas moyen : $\Theta(n\log{}n)$
  • Meilleur cas : $\Omega(n\log{}n)$
    • d'autres algorithmes (p. ex., tri à bulles, par insertion) ont un meilleur meilleur cas
  • Complexité spatiale : $O(n)$
    • pire que les algorithmes à $O(1)$ en espace
  • D'autres variantes réduisent cet espace
Structures de données et algorithmes en Python

Passons à la pratique !

Structures de données et algorithmes en Python

Preparing Video For Download...