Exemples
Recherche du zéro d'une fonction croissante
Soit g une fonction croissante sur un intervalle [a,b] et telle que f(a)≤0 et f(b)≥0. L'algorithme ci-dessous
permet de trouver la valeur x de [a,b] telle que f(x)=0 avec une précision e.
fonction zero(ref g(val n:réel):fonction;val a,b,e:réel):réel;
var M:réel;
début
M=g((a+b)/2);
si |M|<e alors
retourne((a+b)/2)
sinon
si M>0 alors
zero(g,a,(a+b)/2,e)
sinon
zero(g,(a+b)/2,b,e)
finsi
finsi
fin
finfonction
Trouver un élément dans une tableau ordonné
Nous avons déjà traité cet algorithme sous une autre forme au chapitre Tableaux.
Propriété 8.1. T un tableau d'entiers trié d'indice variant entre d et f.
Posons .
Soit e un entier appartenant à la séquence contenue dans T. On a l'une des propriétés suivantes :
- T[m]=e,
- e est dans la séquence contenu dans T[d..m-1],
- e est dans la séquence contenu dans T[m+1..f].
fonction cherche(ref T:tableau[1..N]d'entiers; val e:entier):entier;
var d,f:entier;
fonction chercheRec(ref T:tableau[1..N]d'entiers; val d,f,e:entier):entier;
var m;
début
si f==d alors
si T[d]==e alors
retourner(f)
sinon
retourner(NUL)
finsi
sinon
m=partieEntiere((d+f)/2);
si T[m]<e alors
retourner(chercheRec(T,m+1,f,e))
sinon
retourner(chercheRec(T,d,m,e))
finsi
finsi
fin
finfonction
début
d=1;
f=N;
retourner(chercheRec(T,d,f,e))
fin
finfonction
Propriété 8.2. La complexité de la fonction cherche est O(log2(n)).
idée de la preuve
La complexité de la fonction cherche est donnée par la complexité de chercheRec. Soit f(n) le nombre de test effectué par cette fonction. On a
f(1)=2.
Soit p tel que
2p≤n≤ 2p+1. On a donc
p≤log2(n)≤ p+1.
De plus
et donc f(n)=2*(p+1).
Remarque
L'algorithme de multiplication de deux matrices de dimension nxn s'implémente facilement en O(n3). Strassen a montré qu'en utilisant une méthode diviser pour régner la multiplication peut s'effectuer en O(nln(7)/ln(2))(courbes).