对于二进制搜索树类型的数据结构,我看到Big O标记通常记为O(logn)。在日志中使用小写的“ l”,这是否意味着以自然对数描述的对数为e(n)?很抱歉这个简单的问题,但是我一直很难区分不同的隐式对数。
对于二进制搜索树类型的数据结构,我看到Big O标记通常记为O(logn)。在日志中使用小写的“ l”,这是否意味着以自然对数描述的对数为e(n)?很抱歉这个简单的问题,但是我一直很难区分不同的隐式对数。
Answers:
一旦用big-O()表示法,两者都是正确的。但是,在推导 O()多项式的过程中,对于二进制搜索,只有log 2是正确的。我认为这种区别是您提出问题的直观灵感。
另外,以我的观点,写O(log 2 N)对于您的示例更好,因为它可以更好地传达算法运行时间的推导。
在big-O()表示法中,常数因子被删除。从一个对数底数转换为另一对数底数需要乘以一个常数因子。
因此,由于常数因子,O(log N)等于O(log 2 N)。
但是,如果您可以轻松地在答案中键入log 2 N,则这样做更具教学意义。在二叉树搜索的情况下,你是正确的,日志2 N为大O()运行时的推导过程中引入。
在将结果表示为big-O()表示法之前,区别非常重要。当推导要通过big-O表示法传递的多项式时,在此示例中,在应用O()表示法之前使用log 2 N 以外的对数是不正确的。一旦使用多项式通过big-O()表示法传达最坏情况的运行时,使用什么对数就无关紧要。
log_2 n
在Θ(log_a n)
任何基准中都可以使用in a
,因此我不确定我知道使用基准2如何“更正确”。
Big O表示法不受对数底数的影响,因为不同底数中的所有对数均与一个常数因子相关,O(ln n)
等效于O(log n)
。
log_2 x
与任何独立于的碱基log_b x
的常数因子不同。c(b)
b
x
log_2 n
,我就可以进入并替换log_2 n
所有地方log_pi 2 * log_2 n / log_pi 2
,然后最终得到一个log_pi 2 * log_pi n
无处不在的分析。现在我的分析是根据log_pi n
。
它的基础是什么都没有关系,因为通常写出big-O表示仅显示的渐近最高阶n
,所以常数系数将消失。由于不同的对数底等效于常数系数,因此它是多余的。
话虽如此,我可能会假设对数为2。
首先,您必须了解函数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 | 每当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
log n
他的意思是自然对数。2.当计算机科学家写作时,log n
他的意思是第二位。3.工程师写作时,log n
他的意思是十进制。这些通常是正确的。