算法复杂度2 第三周补分博客
题目要求:
设 n 为正整数, 给出下列 3 个算法关于问题规模 n 的时间复杂度。
- (1) 算法 1
void fun1(int n)
{ i=1,k=100;
while (i<=n)
{ k=k+1;
i+=2;
}
} - (2) 算法 2
void fun2(int b[], int n)
{ int i, j, k, x;
for (i=0;i<n-1;i++)
{ k=i;
for (j=i+1;j<n;j++)
if (b[k]>b[j]) k=j;
x=b[i];b[i]=b[k];b[k]=x;
}
} - (3) 算法 3
void fun3(int n)
{ int i=0,s=0;
while (s<=n)
{ i++;
s=s+i;
}
}
答案:
(1)O(n)
(2)O(n²)
(3)O(根号n)
解题思路:
1.由题意知当i小于等于n的时候进行循环,运算的时间复杂度得出应该为n,因此O(n)
2.由题意知可以看出这是两个嵌套的循环,且每一个嵌套的时间复杂度均为n,基本步骤的执行数量为(n-1)*(n-1)/2,则总体的时间复杂度应该为O(n2)
3.由题意知可以先设n为一个具体的值,进而推导O(n2)的时间复杂度为n,所以最终复杂度就应该为根号下n。