Tri fusion

Structures de données et algorithmes en Python

Miriam Antona

Software engineer

Tri fusion

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

Tri fusion - en action

Schéma d’une liste de nombres non triés.

Structures de données et algorithmes en Python

Tri fusion - en action

Schéma d’une liste de nombres non triés. La liste a été divisée en deux.

Structures de données et algorithmes en Python

Tri fusion - en action

Schéma d’une liste de nombres non triés. La liste a été divisée en deux. Deux nouvelles listes : la moitié gauche et la moitié droite de la liste d’origine.

Structures de données et algorithmes en Python

Tri fusion - en action

Schéma d’une liste de nombres non trié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 de nombres non trié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 de nombres non trié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 de nombres non trié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 de nombres non trié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 de nombres non trié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 de nombres non trié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 de nombres non triés. Les éléments des dernières listes ont été fusionnés et ordonnés.

Structures de données et algorithmes en Python

Tri fusion - en action

Schéma d’une liste de nombres non triés. Les éléments des dernières listes ont été fusionnés et ordonnés.

Structures de données et algorithmes en Python

Tri fusion - en action

Schéma d’une liste de nombres non triés. Les éléments des dernières listes 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 vs bubble sort, selection sort et insertion sort
    • adapté aux grandes listes
  • Cas moyen : $\Theta(n\log{}n)$
  • Meilleur cas : $\Omega(n\log{}n)$
    • d’autres algorithmes (ex. bubble sort, insertion sort) ont un meilleur meilleur cas
  • Complexité spatiale : $O(n)$
    • pire que les algorithmes en $O(1)$
  • 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...