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