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