< back

Diviser pour régner (méthode algorithmique)

author: Kenneth Soares (cours de T. Tournier)

published on: 24-09-2022

Explication du paradigme "Diviser pour régner"

Le paradigme diviser pour régner est une méthode algorithmique basée sur le principe suivant: on prend un problème complexe que l'on divise en une multitude de petits problèmes. Une fois les petits problèmes résolus, on les recombine afin d'obtenir la solution au problème de départ.

TL;DR

On a donc 3 étapes:

Application concrète

On va donc refaire en Python l'algorithme de tri fusion afin de mieux comprendre cette notion.


# on se sert de cette fonction pour fusionner les deux listes
def fusion(l1,l2):
    lvide = []
    while l1 != [] and l2 != []:
        if l1[0] <= l2[0]:
            lvide.append(l1[0])
            l1 = l1[1:]
        else:
            lvide.append(l2[0])
            l2 = l2[1:]

        lvide = lvide + l1 + l2
        return lvide

# on décompose récursivement notre liste de départ en plusieurs listes
# que l'on recompose triées avec fusion()

def tri_fusion(t):
    if len(t) <= 1:
        return t
    else:
        l1 = tri_fusion(t[:len(t) // 2])
        l2 = tri_fusion(t[len(t) // 2:])
    return fusion(l1,l2)

Cet algorithme utilise donc la notion de récursivité pour trier un tableau avec une complexité inférieure a celle du tri par selection, par exemple.

complexité
tri fusion O(nlog₂n)
tri par selection O(n²)