Pour le type d'arbre de recherche binaire des structures de données, je vois que la notation Big O est généralement notée O (logn). Avec un «l» minuscule dans le log, cela implique-t-il un log de base e (n) comme décrit par le logarithme naturel? Désolé pour la question simple mais j'ai toujours eu du mal à distinguer les différents logarithmes implicites.
math
binary-tree
complexity-theory
big-o
BuckFilledPlatypus
la source
la source
log n
il entend le logarithme naturel. 2. Quand un informaticien écrit,log n
il veut dire la base deux. 3. Quand un ingénieur écrit,log n
il veut dire base dix. Celles-ci sont généralement vraies.Réponses:
Une fois exprimés en notation big-O (), les deux sont corrects. Cependant, lors de la dérivation du polynôme O (), dans le cas d' une recherche binaire , seul log 2 est correct. Je suppose que cette distinction a été l'inspiration intuitive pour commencer votre question.
De plus, à mon avis, écrire O (log 2 N) est préférable pour votre exemple, car il communique mieux la dérivation de l'exécution de l'algorithme.
En notation big-O (), les facteurs constants sont supprimés. La conversion d'une base logarithmique à une autre implique la multiplication par un facteur constant.
Donc O (log N) est équivalent à O (log 2 N) en raison d'un facteur constant.
Cependant, si vous pouvez facilement composer le journal 2 N dans votre réponse, cela est plus pédagogique. Dans le cas de la recherche d'arborescence binaire, vous avez raison de dire que log 2 N est introduit lors de la dérivation du runtime big-O ().
Avant d'exprimer le résultat sous forme de notation big-O (), la différence est très importante. Lors de la dérivation du polynôme à communiquer via la notation big-O, il serait incorrect pour cet exemple d'utiliser un logarithme autre que log 2 N, avant d'appliquer la notation O (). Dès que le polynôme est utilisé pour communiquer le pire des cas d'exécution via la notation big-O (), peu importe le logarithme utilisé.
la source
log_2 n
c'estΘ(log_a n)
pour n'importe quelle basea
, donc je ne suis pas sûr de voir en quoi l'utilisation de la base 2 est "plus correcte".La notation Big O n'est pas affectée par la base logarithmique, car tous les logarithmes dans différentes bases sont liés par un facteur constant ,
O(ln n)
équivaut àO(log n)
.la source
log_2 x
diffère delog_b x
par un facteur constantc(b)
pour toute baseb
indépendante dex
.log_2 n
, je peux simplement entrer et remplacerlog_2 n
partout parlog_pi 2 * log_2 n / log_pi 2
et ensuite finir avec une analyse qui alog_pi 2 * log_pi n
partout. Maintenant, mon analyse est en termes delog_pi n
.La base n'a pas vraiment d'importance, car la notation big-O est généralement écrite en ne montrant que l'ordre asymptotiquement le plus élevé de
n
, donc les coefficients constants disparaîtront. Puisqu'une base logarithmique différente équivaut à un coefficient constant, elle est superflue.Cela dit, je suppose probablement la base log 2.
la source
Les deux sont corrects. Penses-y
la source
Oui, quand on parle de notation big-O, la base n'a pas d'importance. Cependant, sur le plan informatique, face à un vrai problème de recherche, cela compte.
Lors du développement d'une intuition sur les structures arborescentes, il est utile de comprendre qu'un arbre de recherche binaire peut être recherché en temps O (n log n) car c'est la hauteur de l'arbre - c'est-à-dire dans un arbre binaire avec n nœuds, l'arbre la profondeur est O (n log n) (base 2). Si chaque nœud a trois enfants, l'arbre peut toujours être recherché en temps O (n log n), mais avec un logarithme de base 3. Sur le plan informatique, le nombre d'enfants que possède chaque nœud peut avoir un impact important sur les performances (voir par exemple: texte du lien )
Prendre plaisir!
Paul
la source
Techniquement, la base n'a pas d'importance, mais vous pouvez généralement la considérer comme base-2.
la source
Vous devez d'abord comprendre ce que cela signifie pour une fonction f (n) d'être O (g (n)).
La définition formelle est: * Une fonction f (n) est dite O (g (n)) ssi | f (n) | <= C * | g (n) | chaque fois que n> k, où C et k sont des constantes. *
soit f (n) = log base a de n, où a> 1 et g (n) = log base b de n, où b> 1
REMARQUE: cela signifie que les valeurs a et b peuvent être n'importe quelle valeur supérieure à 1, par exemple a = 100 et b = 3
Nous obtenons maintenant ce qui suit: la base log a de n est dite O (base log b de n) ssi | base log a de n | <= C * | base log b de n | chaque fois que n> k
Choisissez k = 0 et C = base log a de b.
Maintenant, notre équation ressemble à ceci: | base log a de n | <= base log a de b * | base log b de n | chaque fois que n> 0
Remarquez le côté droit, nous pouvons manipuler l'équation: = log base a de b * | log base b de n | = | base log b de n | * base log a de b = | base log a de b ^ (base log b de n) | = | base log a de n |
Maintenant, notre équation ressemble à ceci: | base log a de n | <= | base log a de n | chaque fois que n> 0
L'équation est toujours vraie quelles que soient les valeurs n, b ou a, autres que leurs restrictions a, b> 1 et n> 0. Donc la base log a de n est O (base log b de n) et comme a, b n'a pas d'importance, nous pouvons simplement les omettre.
Vous pouvez voir une vidéo YouTube dessus ici: https://www.youtube.com/watch?v=MY-VCrQCaVw
Vous pouvez lire un article à ce sujet ici: https://medium.com/@randerson112358/omitting-bases-in-logs-in-big-o-a619a46740ca
la source