将P = 2 ^(logN)重写为log2(P)= log2(N)的解释是什么?

时间:2019-03-07 20:12:32

标签: time-complexity big-o logarithm

我正在研究“破解编码面试”的“大O”一章,并且无法将我的头缠在建议的一种对数操作上。

这本书的第50页试图显示O(2log N)等同于O(N)

这本书以Let P = 2log N开始,然后提出了这样的主张:“根据log 2 的定义,我们可以将其写为log 2 P = log 2 N“

该说法是我的理解破裂的地方。我不明白如何将log2(2log N)减少为log2(N)。如果您查看这两个函数的图表,它们显然是不同的:

graph of log2(2^log(x)) and log2(x)

这是“证明” N = 2log N的一个步骤-也似乎是一个错误的陈述。如果再次绘制它们的图形,则N是线性函数,而2log N是次线性函数。

任何对初学者友好的解释都说明了这一点?谢谢!


编辑以显示log N在这种情况下表示对数基数2(N):

在本书的此示例中,log N表示平衡的二进制搜索树的近似深度。仅计算一棵树的前几层即可清楚地表明我们正在使用log-base-2:

Which log function gives us the answer "Given the number of 
nodes, what is the depth?" Clearly the answer is log-base-2.

  nodes   depth   log2(nodes)   log10(nodes)
      1       1   0             0             
      3       2   1.58          0.48          
      7       3   2.81          0.85          
     15       4   3.91          1.18          
     31       5   4.95          1.49          
     63       6   5.98          1.80          

@Kaiwen Chen的回答是随波逐流的。我们在这里处于CS的世界,假定的对数为2。这本书增加了这种困惑,因为示例的某些部分引用了显式的log2log N则描述了树的深度总是以假定的2为底。

2 个答案:

答案 0 :(得分:1)

在CS中,假定许多log()函数都以2为底,所以2 ^(logx)= x。您的绘图可视化假设以10为底。

这是软件工程专业学生要解决的常见问题。所有数学课程都假设e为基础,所有CS课程都假定为2基础,所有工程课程都假定为10基础。

答案 1 :(得分:1)

这是因为对数函数是指数函数的倒数,即它们相互“撤销” 。您可以考虑对数函数,如下所示:“ 为了获得另一个数字,我必须将数字升为多少幂?在假设相同的底数的情况下,您想到哪一个听起来很简单?非常像指数函数。例如,

在逻辑上等效于:,其中log函数的底数是2

因此,使用此知识将对数函数提高为指数函数的指数会导致抵消。它以“ 撤消”指数的方式。反之亦然,并且将导致相同的结果。 (即具有相同底数的指数函数的对数)

关于您的问题:为什么 O(2 ^ logN)等于O(N)?

这是因为,如上所述,指数函数正在提高相同基数的对数函数,这导致对数抵消,仅剩下N。因此,结果为O(N)

关于为什么您的图表看起来不对,@ Kaiwen Chen很好地解释了这种差异,其中涉及基数的差异。

希望有帮助!