Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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
Algorithm 三个嵌套for循环的时间复杂度_Algorithm_Time Complexity_Big O_Complexity Theory - Fatal编程技术网

Algorithm 三个嵌套for循环的时间复杂度

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循环,如果循环增量为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循环的复杂度是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)
,但是如果您没有关于它的任何信息,那么您应该离开,因为时间复杂性也取决于它是输入的一部分。非常感谢您的澄清。