我不确定以下问题:
对于常数,在O(log b (n a ))中log a (n b ) a,b?
答案 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相似?
要解决这个问题,我们将应用几个对数很棒的属性:
要做的第一件事是修复我们正在比较的大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。
,则为“是”