Je donne le code pour un algorithme en tant que tel:La complexité d'un algorithme (boucles imbriquées)
1 sum =0;
2 for(i=0; i<n; i++)
3 for(j=1; j<= n; j*=3)
4 sum++;
On me dit que cet algorithme fonctionne dans O(nlogn)
où log est dans la base 3. donc que je reçois la deuxième ligne court n times
, et puisque la ligne 3 est indépendante de la ligne 2, je devrais multiplier les deux pour obtenir le Big O, cependant, je ne suis pas sûr de la façon dont la réponse est nlogn (log dans la base 3), est leur moyen garanti de comprendre cela à chaque fois? On dirait qu'avec des boucles imbriquées, il y a un cas différent qui peut survenir à chaque fois.
L'exécution O() de la deuxième boucle, à elle seule, s'exécute exactement (1/3) * n fois, n'est-ce pas? Donc, c'est mieux que O (n), mais évidemment constant, donc nous utilisons log comme limite supérieure car c'est entre les deux. – James
avec la complexité du temps la base du logarithme est sans importance, donc il est éludé et simplement 'O (log n)' – user8