Quelle est la complexité big-O de la fonction (log n)k pour tout k?
Toute fonction dont le runtime a la forme (log n)k est O ((log n)k). Cette expression n'est réductible à aucune autre fonction primitive utilisant des transformations simples, et il est assez courant de voir des algorithmes avec des temps d'exécution comme O (n (log n)2). Les fonctions avec ce taux de croissance sont appelées polylogarithmiques.
Au fait, généralement (log n)k est écrit sous forme de journalk n, donc l'algorithme ci-dessus aurait le temps d'exécution O (n log2 n. Dans votre cas, le journal des fonctions2 n + log n serait O (log2 n).
Cependant, toute fonction avec runtime du journal de formulaire (nk) a le temps d'exécution O (log n), en supposant que k est une constante. En effet, log (nk) = k log n en utilisant des identités logarithmiques, et k log n est O (log n) car k est une constante. Vous devez faire attention à ne pas conclure aveuglément qu'un algorithme qui est O (log (nk)) est cependant O (log n); si k est un paramètre de la fonction ou dépend de n, le calcul big-O correct serait O (k log n) dans ce cas.
Selon le contexte dans lequel vous travaillez, vous voyez parfois la notation Õ (f (n)) pour signifier O(f(n) logk n) pour une constante k. Ceci est parfois appelé " soft-O " et est utilisé dans des contextes dans lesquels les termes logarithmiques ne sont pas pertinents. Dans ce cas, vous pourriez dire que les deux fonctions sont Õ (1), bien que cet usage ne soit pas courant dans la simple analyse algorithmique (en fait, en dehors de Wikipédia, j'ai vu cela utilisé précisément une fois).
J'espère que cela t'aides!
(log n) ^ k est:
etc. Laquelle est significative pour vous dépend des constantes et du contexte.
log(n)
est O((log(n))^2)
donc toute l'expression est O((log(n))^2)
Ce sera toujours (log(n))^2
. Un logarithme élevé à une puissance est déjà sous la forme la plus basse/la plus simple.