我发现在渐近地比较两个函数时采用双方的对数是一种常用的技术(根据CLRS书的问题的一些解决方案)。
但它总是认为两个函数在取对数后的渐近关系表明它们的原始渐近关系?
在比较两个指数函数时,我有点怀疑它是否有效。
例如log(3 ^ n)= nlog3,log(2 ^ n)= nlog2,那么它应该表明O(2 ^ n)和O(3 ^ n)处于相同的运行时间水平,这是不对的。
答案 0 :(得分:1)
渐近边界隐含地包含一个被忽略的乘法常数。
正式地,f(n) = O(g(n))
表示您可以找到N
和C
n > N => f(n) < C.g(n)
。
当取对数时,乘法常数变为加法常数log(f(n)) < log(C) + log(g(n))
,并且f(n) = O(g(n)) <=> log(f(n)) = O(log(g(n)))
不正确。
因此,如果您按对数比较两个复杂度,则不能删除乘法常数,而是添加一个,n.Log(3)
确实不同于n.Log(2).
同样,O(n²)
和O(n³)
也有所不同,因为2.Log(n)
和3.Log(n)
没有相同的效率。