Remarque

Le principe de l’algorithme de diviser pour régner consiste à découper un gros problème, difficile à résoudre, en petits problèmes plus simples.


Obtenir de petits problèmes
Résoudre les petits problèmes: une liste d’un élément est triée.
Trier
Et remonter
              def tri_fusion(tab: list, deb: int, fin: int) -> None:
if deb < fin:
milieu = (deb+fin)//2
tri_fusion(tab, deb, milieu)
tri_fusion(tab, milieu+1, fin)
fusionner(tab, deb, fin)
                  
                def fusionner(tab: list, deb: int, fin: int) -> None:
res = []
milieu = (deb+fin)//2
i = deb
j = milieu+1
while i <= milieu and j <= fin:
    if tab[i] < tab[j]:
        res.append(tab[i])
        i += 1
    else:
        res.append(tab[j])
        j += 1
    
# ajout fin de tab
for i1 in range(i, milieu+1):
    res.append(tab[i1])        
for j1 in range(j, fin+1):
    res.append(tab[j1])
    
# remplacement tab par res
for k in range(fin-deb+1):
    tab[deb+k] = res[k]
                    

  • La complexité du découpage en sous-listes (fonction tri_fusion) est logarithmique.
  • La complexité de la fusion (fonction fusionner) est linéaire.

À retenir

L’algorithme de tri fusion a une complexité: n*log2(n)

Annexes

Liens

Lien vers le notebook

    Sur Capytale

Pièces jointes