在对数复杂度的情况下,决定对数基数的因素是什么?我已经阅读了有关SO的相关问题(如this)。在二进制搜索的情况下,二进制树遍历等。日志的基数是2,因为数据每次被分成两个。但我仍然无法理解/想到其他基地的例子。其他对数复杂性基础的例子是什么?
答案 0 :(得分:2)
从一个基数变为另一个基数涉及乘以常数,这不会改变复杂性,因此基数的选择并不重要。 O(log(N))= O(log(N))。
例如,如果某些算法涉及在大N的极限中接近K = 1.23 log 2 (N)的多个步骤,其中N是问题的某个参数,那么限制也可写成K = 3.45 log 7 (N)。
exponent 中的复杂性是我以前从未听说过的。我认为它完全有道理的唯一方法就是这样: Z = B O(log(N)) 意味着存在一个常数M,所有足够大的N,Z≤B M ln(N)。
答案 1 :(得分:0)
当您解决一个大问题时,通常将其划分为较小的部分,即所谓的分而治之,例如,在快速排序算法中,在每个阶段,数组的大小减半,直到尺寸足够小而解决方案变得微不足道。这里因子是2因为在每个阶段中问题的大小除以2.这是另一个例子:
将十进制数转换为字符串
while (n > 0) {
digits.add(n % 10);
n /= 10;
}
print digits.reverse();
我每次迭代 n 减少到十分之一。因此算法的复杂性为O(log_10 n)。例如,如果n = 1,000,000,000,则算法将在9个步骤= log_10(1,000,000,000)之后最多终止。如果 n 位于 k 基础中,则while
替换10 k ,复杂度变为O(log_k n)。< / p>