在查看了这个question,this article和其他几个问题之后,我仍然无法找到一种通用方法来确定算法的计算复杂性,其中循环变量依赖于父循环& #39;变量。例如,
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的顺序,但我怎么能显示这个?我需要使用系列吗?
感谢您的帮助!
(如果你想知道,这是来自最大和连续子序列问题的暴力实施。)
答案 0 :(得分:2)
O(N * N / 2 * N / 4)约为O((N ^ 3)/ 8)约为O(N ^ 3)