Complexité Des Algorithmes 1
Complexité Des Algorithmes 1
Complexité Des Algorithmes 1
Introduction
t ( n) ∞¿tit × n linéaire en n.
L’algorithme est donc asymptotiquement
Dans cet exemple simple l’évaluation en “pire des cas” est
immédiate puisque t(n) ne dépend pas de la nature des
données, ce qui n’est pas le cas de l’exemple 2 suivant:
Exemple 2
{début}
K0
I1
{#1}
TANT QUE I ≤ N {#2} FAIRE
R R+T[I] {#3}
SI R>1000 {#3’} Alors
R 2*R {#3’’}
FINSI
I I+1{#4}
FINTANTQUE
{fin}
Ici, le pire des cas (celui qui conduit au temps d’exécution le plus
grand) est celui où la condition {#3’} est toujours vraie. En effet
dans ce cas là R 2*R {#3’’} est exécutée à chaque itération.
Exemple 2
Exemple 2
f(n) = 3n +1, g(n) = n
3n+1 est en Θ (n)
En effet d’une part, 3n+1 est en O(n), d’autre part pour n0
=2, et c = 2 on a bien, pour n> n0, l’inégalité
n≤ 2(3n+1) et donc n est en O(3n+1)
Propriété 1
Propriété 2
f ( n)
1) lim = a≠ 0 f est en Θ(g)
g( n)
n→∞
f ( n)
3) lim = ∞ f n’ est pas en O(g) et donc f
n→∞ g( n)
n' est pas en Θ(g)
B0
I1
POUR I 1 à N FAIRE
B B+2
POUR J 1 à N FAIRE
T[I,J] (1+T[J,I] )*B
FINPOUR
FINPOUR
Les notations O et Θ
i= 1
( j=1
)
Op( n)= ∑ 1+ ∑ 2 = ∑ (1+2n )= n(1+2n)= 2n2+n
i= 1
B0
I1
POUR I 1 à N FAIRE
B B+2
POUR J 1 à I FAIRE
T[I,J] (1+T[J,I] )*B
FINPOUR
FINPOUR
Les notations O et Θ
Calcul de la complexité «en pire des cas»
Règle 1: Enchaînement
Soient deux suites d’actions A1 et A2, et A1+A2, la suite
« A1 suivi de A2 ».
Alors:
T(A1+A2)(n) = TA1(n)+ TA2(n)
Calcul de la complexité «en pire des cas»
Règle 2: Conditionnelle
Exemple 6
POUR I 1 à N FAIRE
ResX+Y+Z+Res
SI T[I] +K < B ALORS
{Action1}
POUR J 1 à N FAIRE
Res Res +T[J]
FINPOUR
SINON
{Action2}
ResRes+T[I]
FINSI
FINPOUR
Calcul de la complexité «en pire des cas»
Exemple 7
{ Nous nous intéressons ici au nombre d’opérations (+,-,*), Op(n),
avec N=n}
{ Nous supposons ici que Truc(i,n)<n et que Truc(i,n) nécessite Tt(n)=
(n-i) opérations}
{on suppose aussi que Tab est de dimension Nmax ≥ N+1}
Res 0
L2
TANTQUE L ≤ Truc(L, N) FAIRE
Res Res+2*Tab[L+1]+Truc(L,N)
L L+2
FINTANTQUE
Calcul de la complexité «en pire des cas»
I ideb -1
TANTQUE I < ifin FAIRE
I I+1
Action1
FINTANTQUE
C’est à dire que l’on compte en plus des (ifin-ideb+1)
itérations, (ifin-ideb+2) affectations, additions,
comparaisons.
Remarquons qu’une pratique courante consiste à négliger
(lorsque cela ne change pas la complexité) ces
opérations implicites dans le «POUR..... », comme nous
l’avons fait ci-dessus.
Calcul de la complexité «en pire des cas»
Exemple 8
POUR I 1 à N FAIRE
Res Res+I
FINPOUR
Et finalement
{Const N= 100 }
{TYPE Tabentier = Tableau [1..N] : ENTIER}
FONCTION Somme1( T:Tabentier): ENTIER
VAR I, R: ENTIER
DEBUT
I1
R0
TANTQUE I <= N FAIRE
R R+T[I]
I I+1
FINTANTQUE
retourner (R)
FIN
Comparaison de deux algorithmes
Plus précisément :
Exemple 1
Considérons le cas de n!, En utilisant les propriétés
suivantes:
Fact(0) =1
Fact(n) = n*fact(n-1)
Si nous intéressons au temps d’exécution, nous obtenons
l’équation suivante (où t0 et t1 sont des constantes):
Cas des procédures et fonctions récursives
Op(0) = t0
Op(n) = Op(n-1) + t1
Nous résolvons cette équation par substitutions successives:
{1} Op(n) = Op(n-1) + t1
{2} Op(n-1) = Op(n-2) + t1
{3} Op(n-2) = Op(n-3) + t1
.......
{k} Op(n-k+1) = Op(n-k) + t1
........
{n-1} Op(2) = Op(1) + t1
{n} Op(1) = t0 + t1
---------------------------------------------------------
Op(n) = t0+ n*t1 est en Θ(n).
Cas des procédures et fonctions récursives