【发布时间】:2016-01-30 01:19:06
【问题描述】:
在看了这个question、this article 和其他几个问题之后,我仍然无法找到一种通用的方法来确定循环变量依赖于父循环变量的算法的计算复杂度。例如,
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
for (int k = i; k < j; k++) {
//one statement
}
}
}
我知道第一个循环的复杂度为n,但内部循环让我感到困惑。第二个循环似乎执行了n-i 次,第三个循环似乎执行了j-i 次。但是,我不确定如何将其变成常规的 Big-O 语句。我不认为我可以说O(n(n-i)(j-i)),那么我该如何摆脱这里的i 和j 变量呢?
我知道这是 n^3 数量级的东西,但我该如何显示呢?我需要使用系列吗?
感谢您的帮助!
(如果您想知道,这是来自最大和连续子序列问题的蛮力实现。)
【问题讨论】:
-
您必须使用嵌套总和写入迭代总数,然后计算总和。请注意,虽然在许多情况下(如您的情况)评估总和只会导致每个循环的迭代总数相乘,但情况并非总是如此;如果内部循环中的迭代次数增加,您不能简单地将它们相乘。
-
for (int j = i; i < n; j++) {这不会停止 -
@amit 射击!谢谢,我更正了。
标签: algorithm big-o complexity-theory