具有两个变量的大 O 表示法
Big-O notation with two variables
这源于写一个程序到find the median of two sorted arrays,大小分别为m
和n
,时间复杂度为O(log(m + n))
。
我可以想出 O(log(m) + log(n))
的解决方案。是否符合上述时间要求?
我认为这是积极的,因为:
log(m) + log(n) = log(m*n) <= log((m+n)^2) = 2*log(m+n) = O(log(m+n))
换句话说,存在 k = 2
和 m0 = n0 = 1
。对于任何 m > m0 and n > n0
,都有 log(m*n) <= k*log(m + n)
.
有没有错,还是我说的对?
更一般地说,给定常量 a
,我们可以用相同的推理说 log(n^a) = O(log(n))
吗?
感谢大卫的回答。
Big-O notation 在维基百科上也提到了这一点:
"We may ignore any powers of n inside of the logarithms. The set O(log n) is exactly the same as O(log(n^c))."
是的,您在所有方面都是正确的。对数增长足够慢,渐近 class 对内部函数不是很敏感。
这源于写一个程序到find the median of two sorted arrays,大小分别为m
和n
,时间复杂度为O(log(m + n))
。
我可以想出 O(log(m) + log(n))
的解决方案。是否符合上述时间要求?
我认为这是积极的,因为:
log(m) + log(n) = log(m*n) <= log((m+n)^2) = 2*log(m+n) = O(log(m+n))
换句话说,存在 k = 2
和 m0 = n0 = 1
。对于任何 m > m0 and n > n0
,都有 log(m*n) <= k*log(m + n)
.
有没有错,还是我说的对?
更一般地说,给定常量 a
,我们可以用相同的推理说 log(n^a) = O(log(n))
吗?
感谢大卫的回答。 Big-O notation 在维基百科上也提到了这一点:
"We may ignore any powers of n inside of the logarithms. The set O(log n) is exactly the same as O(log(n^c))."
是的,您在所有方面都是正确的。对数增长足够慢,渐近 class 对内部函数不是很敏感。