这个功能复杂吗?

dis*_*hub 3 complexity-theory

我不确定以下问题:

对于常数a,b,是否在O(log b(n a))中记录a(n b)?

Rob*_*Rob 5

当被问及函数f(x)是否在O(g(x))时,它确实比较了这两个函数的增长率.(参见维基百科:http://en.wikipedia.org/wiki/Big_O_notation)

忽略函数的常数因子,因此2x在O(x)中.此外,具有较低生长速率的函数的组件也被忽略,因此2x ^ 2 + x + 1在O(x ^ 2)中.

所以问题是:loga n ^ b的增长率是否与logb n ^ a相似?

为了解决这个问题,我们将应用几个令人敬畏的对数属性:

  • log x ^ b = b log x
  • loga x =(logb x)/(logb a)

首先要做的是修复我们正在比较的大O符号,因为它不是最小的,通过应用上面的第一个属性我们得到:O(logb n ^ a)= O(logb n),因为常量系数从大O符号表示增长率的实际表示为:O(logb n).

现在将第一个身份应用于我们的第一个公式:

loga n ^ b = b loga n

接下来我们使用我们获得的第二个属性更改基数:

loga n ^ b = b(logb n)/(logb a)

这也可以组织成如下:

loga n ^ b =(b/logb a)logb n

注意(b/logb a)是一个常数系数因此(b/logb a)logb n在O(logb n)中

所以这个问题的答案是肯定的.loga n ^ b在O(logb n ^ a)中.