La faible complexité des algorithmes Diviser pour régner est l'un de leurs principaux intérêts.
Notations : n taille du problème, C(n) coût en nombre d'opérations. Pour les notations de comparaison asymptotiques, consulter Notations de Landau
Cas où la résolution d'un seul sous-problème suffit
Théorème
Si C(n) = C(n / k) + g(n), alors C(n)=C(1)+∑i=1∣log2(n)∣g(ki)
Exemple
Recherche dichotomique : avec deux comparaisons, on choisit le tableau sur lequel continuer la recherche. C(n)=C(n/2)+2=∑i=1∣log2(n)∣2=O(log2(n))
Cas des sous-problèmes de même taille
Théorème 1
Si C(n) = a**C(n / b) + c**n, avec C(1)=constante alors
- si a < b, C(n) = O(n)
- si a = b, C(n) = O(n.log(n))
- si a > b, C(n)=O(nlogb(a))
a représente ici le nombre de sous-problèmes et n/b leur taille.
Exemple 1
Tri fusion : 2 sous-problèmes de taille n/2, donc a=b=2, donc C(n) = O(n.log2(n))
Théorème 2
Si C(n) = a**C(n / k) + f(n) avec a et k deux entiers strictement positifs et f une fonction. Alors
- si f(n)=O(nlogk(a−ϵ)) avec ε > 0, alors C(n)=⊝(nlogk(a))
- si f(n)=⊝(nlogk(a−ϵ)) alors C(n)=⊝(nlogk(a).log(n))
- si f(n)=Ω(nlogk(a+ϵ)) avec ε > 0 et si ∃c<1 tel que a.f(n / k) < = c**f(n) pour n suffisamment grand, alors C(n)=⊝(f(n))
- si a=1 et f(n) = O(logk(n)) avec k > = 1 alors C(n) = O(logk + 1(n))
Exemple 2
Si C(n)=2.C(n/3)+⊝(n), alors C(n)=⊝(n)