Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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
Complexity theory 示例代码的时间复杂度_Complexity Theory - Fatal编程技术网

Complexity theory 示例代码的时间复杂度

Complexity theory 示例代码的时间复杂度,complexity-theory,Complexity Theory,我一直在努力计算我的项目的时间复杂度。如果循环是这样的,有人能指导我如何计算复杂性吗 while (k < K){ for( int i=0; i<M; i++){ // if condition // sets i = dp } for(int i=dp; i<M; i++){ for(int j=0; j<=i; j++){ // single stmt

我一直在努力计算我的项目的时间复杂度。如果循环是这样的,有人能指导我如何计算复杂性吗

while (k < K){

    for( int i=0; i<M; i++){

        // if condition
        // sets i = dp
    }

    for(int i=dp; i<M; i++){

        for(int j=0; j<=i; j++){

            // single stmt
        }

        // if else condition
        function call(); // assume this has complexity of N
    }
    k++;
}
while(k对于(int i=0;i而言,该代码的复杂性将是
K*(M+(M*((M*M)/2+(M/2)+N))

嵌套for循环生成半矩阵示例

  1
  11
  111
  1111
由于全矩阵的复杂度是
M*M
,那么半矩阵将是(
M*M)/2

+我们取整个对角线,我们必须添加
(M/2)

时间复杂度是通过代码的迭代次数来计算的。因此,当我们剖析代码时,有一个顶级循环,它将迭代K次,因此开始时的复杂度是K。然后在该循环中有多个循环,每个嵌套的循环复杂度将乘以顶级循环。所以在顶级循环中级别循环,我们有两个for循环,一个复杂度为M,另一个内部有一个嵌套循环,使得该循环的复杂度为M*j,而被调用函数的复杂度为N,因此将整个代码的复杂度加起来是K*(M+(M*(j+N)))

  • K->首先用于顶级循环
  • M->用于第一个嵌套循环
  • M*(j+N)->用于第二个嵌套循环,它包含一个嵌套循环和一个函数调用

此代码的复杂度为K*(M+(M*(M+N)),这是最大可能

但仍然根据您的代码,它还取决于dp设置为i的值,这可以降低复杂性

那就可以了


这个代码的复杂度将是K*(M+(M*((M-dp)+N))。

N在哪里?我认为应该是K*(M+M*(M+N))对不起,我键入错误。在内部for循环,它是j,但在这种情况下,如果我们考虑为M=4,全矩阵将采取16倍,因为一半必须是8。但是从你的例子来看,它运行的次数是10次……我还是感觉到什么东西丢失了?还是我没有得到正确的答案?当然,我必须加上+m/2,因为我们根据这个半矩阵EX取整个对角线。很好,这似乎是可以接受的,但总的来说我并没有期望太多。bcz与另一个算法相比,我的运行时间非常少。可能是我的解释不是最好的。谢谢你的时间。对不起,我打错了。在内部for循环中,它是j,但
j
只是一个临时计数器,而不是输入大小。耶p一直运行到i次。但是您的解释对于计算来说很好并且可以理解。让set1={1,2,3,0}。在first for循环中,我将检查特定元素并注意其位置。该位置将等于dp。在嵌套的for循环中,循环从第一个位置运行到i。
  1
  11
  111
  1111