关于数学:Big O(logn)日志是e吗?

Is Big O(logn) log base e?

对于二进制搜索树类型的数据结构,我看到Big O标记通常记为O(logn)。 如果日志中的字母为小写" l",这是否意味着以自然对数描述的对数e(n)为对数? 很抱歉这个简单的问题,但是我一直很难区分不同的隐式对数。


大O表示法不受对数底数的影响,因为不同底数中的所有对数均与常数因子相关,O(ln n)等于O(log n)

enter image description here


一旦用big-O()表示法,两者都是正确的。但是,在O()多项式推导过程中,对于二进制搜索,只有log 2 是正确的。我认为这种区别是您提出问题的直观灵感。

另外,根据我的观点,写O(log 2 N)对于您的示例更好,因为它可以更好地传达算法运行时间的推导。

在big-O()表示法中,常数因子被删除。从一个对数底数转换为另一对数底数需要乘以一个常数因子。

因此,由于常数因子,O(log N)等于O(log 2 N)。

但是,如果您可以轻松地在答案中输入log 2 N,则这样做更具教学意义。在二叉树搜索的情况下,正确的是在导出big-O()运行时期间引入了log 2 N。

在将结果表示为big-O()表示法之前,区别非常重要。当推导要通过big-O表示法传递的多项式时,在此示例中,在应用O()表示法之前使用log 2 N以外的对数是不正确的。一旦使用了多项式通过big-O()表示法来传达最坏情况的运行时,使用什么对数就无关紧要了。


它的基础是什么都没有关系,因为通常写出大O表示仅显示n的渐近最高阶,因此常数系数将消失。由于不同的对数基数等于常数系数,因此它是多余的。

话虽如此,我可能会假设对数为2。


两者都是正确的。考虑一下

1
2
3
log2(n)=log(n)/log(2)=O(log(n))
log10(n)=log(n)/log(10)=O(log(n))
logE(n)=log(n)/log(E)=O(log(n))

首先,您必须了解函数f(n)为O(g(n))的含义。

形式上的定义是:*一个函数f(n)被称为O(g(n))iff | f(n)| <= C * | g(n)|每当n> k时,其中C和k为常数。

因此,令f(n)= n的对数a,其中a> 1,而g(n)= n的对数b,其中b> 1

注意:这意味着值a和b可以是大于1的任何值,例如a = 100和b = 3

现在我们得到以下结果:n的对数底数a被称为O(n的对数底数b)iff | n |的对数底数a | <= C * |以n为底的对数b |每当n> k

选择k = 0,并且C =以b为底的对数。

现在我们的方程式如下:| n的对数底| <= b的对数底数a * | n的对数底数b |每当n> 0

注意右侧,我们可以处理以下等式:= b的对数底数a * | n |的对数底数b = |以n为底的对数b | * b的对数基数a = | b ^的对数基数a(n的对数基数b)| = |以n为底的对数a |

现在我们的方程式如下:| n的对数底| <= | n的对数基数a |每当n> 0

除了其约束a,b> 1和n> 0之外,无论值n,b或a是多少,该方程始终是正确的。
因此,n的对数底数a为O(n的对数底数b),由于a,b无关紧要,我们可以简单地忽略它们。

您可以在此处查看YouTube视频:https://www.youtube.com/watch?v=MY-VCrQCaVw

您可以在此处阅读有关此文章:https://medium.com/@randerson112358/omitting-bases-in-logs-in-big-o-a619a46740ca


是的,在谈论big-O表示法时,基数无关紧要。但是,在计算上,当遇到真正的搜索问题时,它确实很重要。

在开发有关树结构的直觉时,了解可以在O(n log n)时间内搜索二叉搜索树很有帮助,因为这是树的高度-也就是说,在具有n个节点的二叉树中,树深度为O(n log n)(以2为底)。如果每个节点有三个子节点,仍然可以在O(n log n)时间内搜索树,但对数为3。通过计算,每个节点具有的子代数可能会对性能产生很大影响(例如,请参见链接文本)

请享用!

保罗


从技术上讲,基数并不重要,但是您通常可以将其视为基数2。