【发布时间】:2013-09-06 20:08:47
【问题描述】:
有人可以帮助我了解如何找到以下循环的时间复杂度:
for (int j = 1 to n) {
k = j;
while (k < n) {
sum += a[k] * b[k];
k += log n;
}
}
我找到了解决方案here,即 n2 / log(n)。
很明显,外部循环需要 n 次,但对于内部循环,我被卡住了。 n / log n 因子从何而来?
我尝试逐个术语地遵循它,但无法继续
1st time k = 1,
2nd time k = 1 + log n
3rd time k = 1 + log n + log n // (2 log n)
stuck here :(
我怎样才能找到一种模式,或者我应该遵循哪些最佳步骤来获得此类代码的时间复杂度?
【问题讨论】:
-
注意 while() 循环中的
k += log n。您可以将其重写为for (k = j; k < n; k += log n) { ... }以更明确地说明 O() 中的日志 n 来自何处。 -
感谢您的解释。其实我可以理解 log 来自哪里,但是为什么 (n/log n) 不能只登录??
标签: algorithm math big-o logarithm