next up previous contents index
Next: La transformée de Fourier Up: Algorithmes Previous: L'algorithme

     
Diviser pour régner

Un algorithme diviser pour régner a la structure suivante : pour résoudre un problème de taille n, l'algorithme consiste à décomposer le problème en a sous-problèmes ayant tous la taille n/b (peut-être approximativement), à appliquer l'algorithme à tous les sous-problèmes, puis à construire une solution du problème en composant les solutions des sous-problèmes. Non seulement cette méthode est naturelle (et voisine du second précepte de la méthode de Descartes), mais elle permet souvent une réduction importante de T(n), la complexité dans le pire des cas de l'algorithme appliqué à un problème de taille n. On suppose que la complexité des opérations de décomposition du problème et de recomposition des solutions des sous-problèmes a une complexité en d(n). Enfin, on se donne la complexité T(1) sur un problème de taille 1. La complexité de l'algorithme est donc déterminée par l'équation de récurrence suivante :

T(n) = aT(n/b) + d(n)

Voici quelques exemples :

   

Résolvons ces équations quand n est une puissance de b ; dans ce cas l'équation s'écrit :

T(bp) = a T(bp-1) + d(bp)

Sa solution est

\begin{displaymath}T(b^p) = a^p T(1) + \sum_{j=0}^{p-1} a^j d(b^{p-j})
\end{displaymath}

Le premier terme, $a^p = a^{\log_b n} = n^{\log_b a}$ correspond à la complexité due à la résolution de tous les sous-problèmes ; le second terme est la complexité due à toutes les opérations de décomposition/recomposition.

Examinons ce deuxième terme quand $d(n) = n^\delta$. On a

\begin{displaymath}\sum_{j=0}^{p-1} a^j d(b^{p-j}) =
b^{p\delta} \sum_{j=0}^{p-1}(\frac{a}{b^\delta})^j
\end{displaymath}

Discutons selon les valeurs relatives de a et $b^\delta$.


next up previous contents index
Next: La transformée de Fourier Up: Algorithmes Previous: L'algorithme
R. Lalement
2000-10-23