On a un problème avec une solution "simple" 
 pour des
entrées 
 de taille petite.
Pour 
 de taille grande, on le décompose en plus petites entrées 
,
..., 
, de taille plus petite. Par exemple, on décompose le problème
en deux avec des tailles moitié. On fait alors tourner le programme 
 sur
ces entrées. Éventuellement, pour pouvoir décomposer le problème et le recomposer,
on a d'autres petites choses à faire
dont le coût est en 
.
 Diviser pour régner 
Input: 
Output:  
si
 est petit ou simple alors
       retourner  alogsimple(x)
 
 Décomposer 
 en sous-entrées 
, ..., 
pour
  à 
 faire
       
 
 recombiner les 
 en une solution 
 pour 
 retourner  
Si le coût du programme est 
, on a donc
 pour 
 ;
 
 pour 
 est le coût de l'algorithme simple.
Par exemple, si l'on a décomposé le problème en deux problèmes
de taille moitié, pour 
, 
.
Il reste à évaluer à partir de cette inégalité de récurrence
quel est le coût. Pour cela on s'inspire du lemme suivant.
Lemme
 Soit 
 une fonction vérifiant
 pour 
 et 
 pour certains
, 
 et 
 réels et pour 
. Une
borne supérieure pour 
 lorsque 
 est
 
  
  Démonstration
   
On écrit 
 avec 
 inférieur à une constante 
,
d'où 
.
Par récurrence,
La dernière inégalité n'est valable que si 
 est différent de 
.
On a alors 
 avec 
 fonction bornée
et 
Donc 
 est la forme 
avec 
 et 
 bornés.
-  
    Si 
, c'est un 
.
 
 -  
    Si 
, c'est un 
.
 
 -  
  Si 
,
  
 
Il existe des versions avec des relations du type
où le comportement asymptotique de 
 est connu.
Dans les cas réels, la fonction 
 n'est pas définie sur 
,
on ne la connait souvent bien que sur une classe d'entiers (par
exemple dans le cas de dichotomie, sur les entiers de la forme 
).
On fait alors des hypothèses raisonnables sur la fonction de coût
pour pouvoir appliquer ce lemme ou une variante
(croissance, 
 ...)
Exercice
Application