我一直在努力计算项目的时间复杂度。有人可以指导我如何计算复杂性,如果循环是这样的。
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++;
}
请提供一些有关如何识别存储空间复杂性的建议。
答案 0 :(得分:1)
此代码的完整性为K* (M+(M*((M*M)/2+(M/2)+N))
K-times for while loop
M-times for first for loop
M*((M*M)/2+(M/2)+N) - for nested for loop
你的嵌套for循环产生半矩阵示例
1
11
111
1111
由于全矩阵复杂度为M*M
,因此半矩阵将为(M*M)/2
+我们采取整个对角线,我们必须添加(M/2)
答案 1 :(得分:1)
时间复杂度由代码执行的迭代次数计算。因此,当我们剖析代码时,有一个顶级循环将迭代K次,因此开始的复杂性是K.然后在该循环内有多个循环,每个嵌套循环复杂性将乘以顶级循环。所以在顶级循环中,我们有两个for循环,一个具有复杂度M,另一个具有嵌套循环,使得该循环的复杂性为M * j。 N为被调用的函数所以将整个代码的复杂性加在一起是 K *(M +(M *(j + N)))
答案 2 :(得分:0)
此代码的完整性为K *(M +(M *(M + N)),它是最大可能性。
但仍然按照你的代码,它还取决于dp设置为什么,可以降低复杂性。
那么它可以是
此代码的复杂度为 K *(M +(M *((M-dp)+ N))。