Votre archétype est un algorithme de division et de conquête , qui divise (et recombine) le travail en temps linéaire et se reproduit sur les pièces. Le tri par fusion fonctionne de cette façon: passez O ( n ) temps à diviser l'entrée en deux morceaux à peu près égaux, triez récursivement chaque morceau et passez Θ ( n ) temps à combiner les deux moitiés triées.Θ ( n logn )O ( n )Θ ( n )
Intuitivement, poursuivant l'idée de diviser pour mieux régner, chaque étape de division prend un temps linéaire au total, car l'augmentation du nombre de pièces à diviser correspond exactement à la diminution de la taille des pièces, car le temps pris par la division est linéaire. Le temps de fonctionnement total est le produit du coût total d'une étape de division multiplié par le nombre d'étapes de division. Étant donné que la taille des pièces est divisée par deux à chaque fois, il existe étapes de division log 2 ( n ) , de sorte que le temps de fonctionnement total est n ⋅ log ( n ) . (Jusqu'à une constante multiplicative, la base du logarithme n'est pas pertinente.)Journal2( n )n ⋅ log( n )
En le mettant dans les équations (), une façon d'estimer le temps d'exécution d'un tel algorithme est de l'exprimer récursivement: T ( n ) = 2 T ( n / 2 ) + Θ ( n ) . Il est clair que cet algorithme prend plus que du temps linéaire, et nous pouvons voir combien plus en divisant par n :
T ( n )T( n )T(n)=2T(n/2)+Θ(n)n
T(n)n=T(n/2)n/2+Θ(1)
Lorsque
ndouble,
T(n)/naugmente d'une quantité constante:
T ( n ) = Θ ( n log n )T(n)/n augmente logarithmiquement, ou en d'autres termes, .
T(n)=Θ(nlogn)
Ceci est une instance d'un modèle plus général: le théorème maître . Pour tout algorithme récursif qui divise son entrée de taille dans des morceaux de taille et prend un temps pour effectuer la division et de recombinaison, le temps d' exécution satisfait . Cela conduit à une forme fermée qui dépend des valeurs de et et de la forme de . Si et , le théorème maître déclare que .a n / b f ( n ) T ( n ) = a ⋅ T ( n / b ) + f ( n ) a b f a = b f ( n ) = Θ ( n ) T ( n ) = Θ ( n log n )nan/bf(n)T(n)=a⋅T(n/b)+f(n)abfa=bf(n)=Θ(n)T(n)=Θ(nlogn)