Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这个代码片段的复杂性是什么?_Java_Algorithm - Fatal编程技术网

Java 这个代码片段的复杂性是什么?

Java 这个代码片段的复杂性是什么?,java,algorithm,Java,Algorithm,关于下面代码的时间复杂性,我有一个问题。我猜时间复杂度是,O(n^3)但是我的朋友告诉我时间复杂度应该是O(n^2)。然而,我仍然不相信答案。我的立场是: 第一个和第二个for循环将花费O(1/2n^2),而内部循环将需要另一个O(n)复杂度。因此,它是关于O(n^3) for (int i = 1; i <= len; i++) { for (int j = i + 1; j <= len; j++) { int mid = (i + j) / 2;

关于下面代码的时间复杂性,我有一个问题。我猜时间复杂度是,O(n^3)但是我的朋友告诉我时间复杂度应该是O(n^2)。然而,我仍然不相信答案。我的立场是: 第一个和第二个for循环将花费O(1/2n^2),而内部循环将需要另一个O(n)复杂度。因此,它是关于O(n^3)

for (int i = 1; i <= len; i++) {
    for (int j = i + 1; j <= len; j++) {
        int mid = (i + j) / 2;
        for (int k = i; k <= j; k++) {
            dist[i][j] += Math.abs(A[k - 1] - A[mid - 1]);
        }
    }
}

for(int i=1;i因此您需要找到类似以下内容的时间复杂性:

for (int i = 1; i <= N; i++) {
    for (int j = i + 1; j <= N; j++) {
        for (int k = i; k <= j; k++) {
            // some O(1) operation
        }
    }
}
检查了一个,是的


这显然是O(n^3)

你朋友在n^2后面的推理是什么请注意O(n²)⊂ O(n³),所以你们可能都是对的。@SIRO1690原谅他。这是事实上的O(n^3)。如果某个东西是O(n x n),那么它也是O(n x n x n)。如果你自己不能正确地求和,Wolfram alpha可以精确地计算循环数:
求和(求和j-i+1,对于j=i+1到n),对于i=1到n
def check(N):
    s = 0
    for i in xrange(1, N + 1):
        for j in xrange(i + 1, N + 1):
            for k in xrange(i, j + 1):
                s += 1
    return s

print [check(i) for i in xrange(1, 10)] // [0, 2, 7, 16, 30, 50, 77, 112, 156]