Java 您好,我很难理解这段代码中if语句的O-notation运行时 for(inti=0;i
您有两个嵌套的Java 您好,我很难理解这段代码中if语句的O-notation运行时 for(inti=0;i,java,if-statement,matrix,big-o,Java,If Statement,Matrix,Big O,您有两个嵌套的for循环,每个循环取决于V的大小。因此,您的总复杂度将是O(V2)。for(inti=0;i
for
循环,每个循环取决于V
的大小。因此,您的总复杂度将是O(V2)。for(inti=0;i本身就是O(n)
然后运行for(int j=i+1;j整个代码是O(V^2)
,因为x=1
到x=V
的x之和是(1/2)V(V+1)
。内环是O(V)
,因为它必须完成的最大迭代次数是V-1
如果语句是O(1)
:它完成的步骤有一个恒定的最大值。我们需要看到更多的代码,因为它是恒定的。这段代码是恒定的(O(1)
)因为它的执行时间不取决于输入的大小,但是这可能在一些循环中,查看这些循环将告诉您实际的复杂性。您在这里没有向我们显示循环。if
语句将是O(c)。请显示您的循环。@SethB对不起,我在代码中添加了for循环。if语句计数为O(1),即一个常量操作,不管条件值(真或假)。有趣的部分是j=i+1
,而它仍然是O(V^2)
回答这个问题的全部目的是解释这在多大程度上降低了复杂性。吹毛求疵:任何地方都没有n
。@DSquare这是Big-O表示法,所以我用n
表示Big-O表示法。n
不是Big-O表示法固有的,只是在理论上解释它时是传统如果说“N是我们输入的大小,那么大O表示法将是……”。然而,这是一个具体的例子,输入的大小是V
。更清楚地说,名称很重要,因为它可能指不同的东西。读取大小为WxH的矩阵的复杂性是什么?它是O(W*H)
。它不是O(N*N)
或O(N*M)
对于定义的W和H,它是O(W*H)
。你需要能够用输入的维度识别每个“变量”,你不能只放你“习惯”的字母。它们不是没有意义的。
for (int i=0; i<V-1; i++) {
for (int j=i+1; j<V; j++) {
if (matrix[i][j]) {
from[nextedge]=i;
to[nextedge]=j;
nextedge++;
}
}
}