编程领域的log(n)是否等价于log2(n)?二者有什么区别?
算法复杂度中log(n)与log2(n)的差异说明
先说结论:在算法时间/空间复杂度的讨论语境下,二者本质等价,不需要做区分,具体原因和差异场景如下:
- 复杂度分析统计的是数据规模n趋近于无穷大时的渐进增长趋势,会忽略所有常数系数。根据对数换底公式,
log_a(n) = log_b(n) / log_b(a),其中1/log_b(a)是固定常数值,所以无论对数底数是多少,最终的增长级别完全一致,统一记作O(log(n))即可。 - 二分查找每次将搜索范围缩小一半,推导过程得到的确实是log₂(n)的具体步数,只是在复杂度表示时,省略底数不影响对增长级别的判断,因此很多资料会直接简写为log(n)。
二者只有在非复杂度分析的场景下才需要明确区分:
数学领域通常默认log(n)是底数为10的常用对数,部分理工科领域会默认是底数为e的自然对数;编程中不同语言的内置对数函数实现也有差异,比如C语言的
log()是自然对数,log10()是常用对数,log2()才是以2为底的对数,这类需要计算具体数值的场景下,不能直接将二者划等号。
日常学习算法的过程中,只要看到复杂度标记为O(log(n)),默认理解为对数级增长即可,对于折半类操作的场景,自然对应以2为底的对数增长速率。
内容的提问来源于stack exchange,提问作者edju03
相关产品推荐
相关产品推荐

