关于算法:Big O表示法Log Base 2或Log Base 10

Big O notation Log Base 2 or Log Base 10

本问题已经有最佳答案,请猛点这里访问。

当文章/问题声明算法的Big O运行时间为O(LogN)时。

例如,Quicksort的大O运行时间为O(LogN),其中它的对数为10,而二叉树的高度为O(LogN + 1),其中它的对数为2

1)我对是以10为底数还是以2为底数感到困惑,因为不同的文章对数使用不同的底数。

2)如果它的对数为2或对数为10,会有所不同吗?

3)当我们看到O(LogN)时,是否可以假设它的对数为10?


我认为日志的基础是什么都没有关系,因为相对的复杂性是相同的,而与所使用的基础无关。

因此,您可以将其视为O(log 2 X)= O(log 10 X)

还要提到对数是由一些常数关联的。

enter image description here

所以log ??(x)= log?(x)/ log?(10)

因此,在大多数情况下,我们通常在复杂性分析中不考虑常量,因此,我们说基数无关紧要。

您也可能会发现大多数情况下,就像合并合并中一样,该底数被视为2。由于节点有两个分支,因此树的高度为log? n

1)I am confused over whether is it Log base 10 or Log base 2 as
different articles use different bases for their Logarithm .

因此,如上所述,基数的变化无关紧要。

2) Does it make a difference if its Log base 2 or Log base 10??

不,没关系。

3)Can we assume it mean Log base 10 when we see O(LogN)???

是的,只要您知道基本转换规则,就可以假设。


对所有x的log(x)= log(x)/ log(10)。 1 / log?(10)是一个常数乘数,可以从渐近分析中省略。

更一般而言,通过对数除以log?(b)可以将任何对数的底数从a更改为b(均为常数wrt。n),因此您可以在大于1的对数底数之间自由切换:O(log ??(n ))与O(log?(n)),O(ln(n))等相同。

这样的一个示例结果是,即使B树在分析中给出了更高的对数底数,也不会渐近击败平衡的二分搜索树。只是具有更好的常数。


在Big O表示法中,所有基数的O(log(n))均相同。这是由于对数基数转换:

1
log2(n) = log10(n)/log10(2)

1/log10(2)只是一个常数乘数,因此O(log2(n))O(log10(n))相同