Algorithm 三个嵌套for循环的时间复杂度
有三个嵌套for循环,如果循环增量为1,我可以发现复杂性,但是如果循环增量像这样I+=c,我会感到困惑吗Algorithm 三个嵌套for循环的时间复杂度,algorithm,time-complexity,big-o,complexity-theory,Algorithm,Time Complexity,Big O,Complexity Theory,有三个嵌套for循环,如果循环增量为1,我可以发现复杂性,但是如果循环增量像这样I+=c,我会感到困惑吗 for (int i = 0; i < n; i+=c) for (int j = 0; j < i; j++) for (int k=0; k < m; k++) result[i,j]= x[j]-y[k] for(int i=0;i
for (int i = 0; i < n; i+=c)
for (int j = 0; j < i; j++)
for (int k=0; k < m; k++)
result[i,j]= x[j]-y[k]
for(int i=0;i
第三个for循环的复杂度是m,但第一个for循环的复杂度是n/c,第二个for循环的复杂度是n==>将范围相乘:n/c*n*m=n^2/c*m=>最坏的情况是O(n^2)。这是正确的吗?
如何使用求和形式计算总迭代次数?在您的情况下,时间复杂度取决于两个参数:
m
和n
,因为中间循环可以表示为第一个循环的函数
如果考虑迭代的总数,它们的顺序是:
1/2 * m * n * (n-1) = O(mn^2)
左侧部分假定c=1
。然而,给定c
作为一个常数,总体时间复杂度不会改变
如果c不是一个常数,那么得到的时间复杂度将是
O(mn^2)/c
什么是m?是数组的长度吗?是的,m和n是两个不同数组的长度。我想你应该用c
除以,因为i+=c
谢谢你的帮助。我的困惑是c部分,我在这里看到了很多例子,如果I+=2,复杂性将是n/2。每次程序运行时,c都有不同的值。但是如果n^2占主导地位,我应该在大O符号中单独包含它还是应该包含所有变量O(mn^2/c)?!取决于您是否有关于m
的其他信息,并且您可以对其进行特征化。例如,如果m=O(n^2)
和c=O(1)
那么它就变成了O(n^4)
,但是如果您没有关于它的任何信息,那么您应该离开,因为时间复杂性也取决于它是输入的一部分。非常感谢您的澄清。