这个功能复杂吗?

时间:2011-06-11 05:43:54

标签: complexity-theory

我不确定以下问题:

对于常数,在O(log b (n a ))中log a (n b ) a,b?

2 个答案:

答案 0 :(得分: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)。

答案 1 :(得分:1)

让我们将第一个表达式写为b * log a (n),将第二个表达式写为* log b (n)。

第一个相当于b * log(n)/ log(a),第二个相当于* log(n)/ log(b)。

因此,假设是:“是否存在整数n 0 和k,使得对于所有n> n 0 ,b * log(n)/ log( a)< k * a * log(n)/ logb?“

稍微简化一下,那就是:“... b / log(a)< k * a / log(b)?”

通过进一步的重新安排,我们有:“... b * log(b)< k * a * log(a)?”

因此,答案取决于“a”和“b”是什么。如果b< = a。

,则为“是”