J'essaie de trouver la complexité temporelle de cette fonction:complexité Temps d'une fonction Big-O
int bin_search(int a[], int n, int x); // Binary search on an array with size n.
int f(int a[], int n) {
int i = 1, x = 1;
while (i < n) {
if (bin_search(a, i, x) >= 0) {
return x;
}
i *= 2;
x *= 2;
}
return 0;
}
La réponse est (log n)^2. Comment venir?
Le meilleur que je pouvais obtenir est log n
. D'abord le i
est 1
, donc le temps sera couru log n
fois.
Lors de la première interaction, lorsque i=1
, la recherche binaire aura une seule interaction car la taille du tableau est 1 (i). Puis, quand i=2
, deux interactions, et ainsi de suite jusqu'à ce que ce soit log n
interactions.
Donc, la formule que je pensais tenir est this.
La somme est pour le moment et l'équation interne est parce que pour i=1
c'est log(1)
, pour i=2
c'est log(2)
et ainsi de suite jusqu'à ce que ce soit log(n)
à la fin.
Où est-ce que je me trompe?
Vous avez oublié de simplifier. 'log (n/2^i) = log (n) - i'. Quand vous additionnez cela 'log (n)' fois, vous obtenez la réponse. – StoryTeller
@StoryTeller Dieu. Tu as raison. – SomeoneWithAQuestion