Diviser pour régner
La technique de programmation « diviser pour régner » consiste à diviser un problème complexe en plusieurs problèmes simples.
Les algorithmes utilisant cette méthode, s’écrivent naturellement de manière récursive.
Paradigme « diviser pour régner » en 3 étapes :
- Diviser : on divise les données initiales en plusieurs sous-parties,
- Régner : on résout récursivement chacun des sous-problèmes associés,
(chaque sous-problème étant plus facile à résoudre que le problème précédent/source/parent) - Combiner : les solutions des sous-problèmes sont combinées afin d’obtenir la solution du problème d’origine.
Exemple : l’exponentiation rapide
La première façon de calculer une puissance \(x^n\) est de multiplier \(x\) par lui-même \(n\) fois. Cependant, il existe des méthodes bien plus efficaces :
Si on écrit \(n\) en base 2 :
\(n=a_02^0+a_12^1+\cdots+a_d2^d=\displaystyle\sum_{i=0}^d a_i2^i\)
avec \(a_i\in\left\{0,1\right\}\)
On a alors :
\(\Large{x^n=\displaystyle\prod_{i=0}^d (x^{2^i})^{a_i}}\)
Tri fusion
Le tri fusion d’une liste est basé sur le principe suivant : « plus une liste est petite, plus elle est facile à trier ».
La liste la plus facile à trier est la liste de taille 1, puisqu’elle est déjà triée !
Ainsi on divise la liste initiale jusqu’à ce que chaque sous-partie soit de taille 1,

puis on combine les listes 2 par 2 en les interclassant : on remplit une nouvelle liste en sélectionnant les éléments dans les deux premières, dans l’ordre croissant :


Rotation en place d’une image
Voir exercice Rotation d’une image





