Algorithm 大O符号对数基数2或对数基数10

Algorithm 大O符号对数基数2或对数基数10,algorithm,big-o,logarithm,Algorithm,Big O,Logarithm,当文章/问题声明算法的大O运行时间为O(LogN)时 例如,快速排序有一个大的O运行时间O(LogN),其中it是以Log为基数的10,但二叉树的高度是O(LogN+1),其中it是以Log为基数的2 问题 1) 由于不同的文章使用不同的对数基,我对它是以10为底还是以2为底感到困惑 2) 如果它的对数基数为2或对数基数为10,会有区别吗 3) 当我们看到O(LogN)时,我们能假定它是以10为基数的吗?我认为以什么为基数是无关紧要的,因为无论使用什么基数,相对复杂度都是相同的 所以你可以把它想

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

例如,快速排序有一个大的O运行时间O(LogN),其中it是以Log为基数的10,但二叉树的高度是O(LogN+1),其中it是以Log为基数的2

问题

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

2) 如果它的对数基数为2或对数基数为10,会有区别吗


3) 当我们看到O(LogN)时,我们能假定它是以10为基数的吗?

我认为以什么为基数是无关紧要的,因为无论使用什么基数,相对复杂度都是相同的

所以你可以把它想象成O(log2X)=O(log10X)

还要提到的是,对数是由一些常数联系起来的

日志₁₀(x) =原木₂(x) /log₂(10)

所以在大多数情况下,我们在复杂性分析中通常忽略常量,因此我们说基数无关紧要

此外,您可能会发现,在大多数情况下,基数被认为是2,就像在中一样。树的高度为
log₂ n
,因为节点有两个分支

1) 我不知道是以10为底还是以2为底 不同的文章使用不同的对数基

正如上面解释的,这个基数的变化并不重要

2) 如果它的对数基数为2或对数基数为10,会有区别吗

不,没关系

3) 当我们看到O(LogN)时,我们能假设它的意思是logbase 10吗

是的,如果您知道基本转换规则,您可以假设。

log₁₀(x) =原木₂(x) /log₂(10) 对于所有x。1/日志₂(10) 是一个常数乘数,可以从渐近分析中省略

更一般地说,任何对数的底都可以通过除以对数从a变为b(都是常数wrt.n)ₐ(b) ,因此您可以在大于1:O(log)的日志基础之间自由切换₁₀(n) )与O(log)相同₂(n) )、O(ln(n))等

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

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

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

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

相同,只有当日志的基数是常数时才是这样
log\u 2 n
log\u 10 n
类似,但与
log\u n
不同:)@dg99:-我已经更新了我的答案。希望这能让事情变得更清楚:)通常,教科书和学术论文在说
logn
时都暗示着
logn
。当您考虑复杂性类中讨论的第一个算法之一:二进制搜索时,这是最容易实现的。二进制搜索的整个前提是,它在每一步都将您的工作减半,因此算法的复杂性特别是
log_2 n
。尽管在使用
big-O
表示法时,任何常数基都可能是有效的,但考虑一下复杂性为何是对数的也不是一个坏主意。是不是因为每一步都会把你的工作量减半?十次?取决于您的决策阶段在算法中每次迭代产生的方式。如果它是2,像检查条件,或者做这个或者做那个,那么它就是基数2,但是如果你做一个决定,有三个结果,而不是基数3,依此类推。人们说基数并不重要,但当你需要计算Log(n)时,基数确实重要。