Complexité des algos
Résolu
cc
-
cc -
cc -
Bonjour,
J'ai du mal a calculer la complexité des algos.
Par exemple en cours, on a dit que la complexité est logarithmique pour cet algo alors que pour moi c'est linéaire.
Voici l'algo:
Merci d'avance!
J'ai du mal a calculer la complexité des algos.
Par exemple en cours, on a dit que la complexité est logarithmique pour cet algo alors que pour moi c'est linéaire.
Voici l'algo:
Pour i allant de 1 à n par pas de 1 faire
j<--1;
tant que j<n faire
j<--j*2
Merci d'avance!
1 réponse
-
Bonjour,
Ton algorithme n'est ni linéaire enO(n)
, ni logarithmique enO(log n)
, mais il est linéarithmique enO(n.log n)
.
Démonstration :
Soitn=2^k
aveck
un entier.
Partie 1 :
j<--1;
tant que j<n faire
j<--j*2
À l'étape 1 on aj=1=2^0
, à l'étape 2 on aj=2=2^1
, à l'étape 3 on aj=4=2^2
,
à l'étape k on aj=2^(k-1)
et on multiplie à nouveau par 2 pour obtenirj=2^k=n
, mais on n'a plusj<n
donc la boucle s'arrête. On a faitk
étapes.
Partie 2 :
Pour i allant de 1 à n par pas de 1 faire
j<--1;
tant que j<n faire
j<--j*2
Ici, on simplifie avec le résultat de la première partie :
Pour i allant de 1 à n par pas de 1 faire
k étapes
Donc au final, on va faire n*k étapes.
Partie 3 :
Rappel : on est dans le cas oùn=2^k
, c'est à dire quek=log2(n)
.
On va donc faire exactementn*k = n*log2(n)
étapes quandn=2^k
, ce qui se généralise par unO(n.log n)
quand n est quelconque (CQFD).