<1.>时间复杂度:
如下代码:
for(i = 0;i<n;i++)
{
for(j = 0;i<n;j++)
{
count++;
}
}
int a = 10;
while(a--)
{
count++;
}
基本操作执行了n*n+10次,但是随着n的增加,10对其影响微乎其微,所以这个程序的时间复杂度是O(n^2),所哟第一条原则:保留老大哥。
for(i = 0;i<n;i++)
{
count++;
}
for(i = 0;i<n;i++)
{
count++;
}
该代码执行了n+n=2*n次,但是时间复杂度是O(n),所以第二条原则:系数为1。
for(i = 0;i<100;i++)
{
count++;
}
该代码执行了100次,but,时间复杂度是O(1),所以第三原则:常数为1。
int fun(int n)
{
return n<2?n:n*fun(n-1)
}
改代码执行的是阶乘的递归运算,要进行n次递归,所以时间复杂度是O(N)。
再就是冒泡排序,由他的原理可以知道,冒泡排序是前一个和后一个相比较,第一次比较n-1次,第二次是n-2次……最后一次是比较一次,所以时间复杂度是次数的求和,根据保留老大哥原则,时间复杂度就应该是O(n^2)
所以我们得出一个结论,时间复杂度和几层循环没有必然联系,两层循环不一定就是O(N^2),例如快速排序,时间复杂度就是O(N),但是他是双循环。
再就是二分查找,显然是一个对数阶,记为O(logN)。
以上常见时间复杂度相关问题就介绍完了。
<2.>再者就是空间复杂度。还是这个代码段。
for(i = 0;i<n;i++)
{
for(j = 0;i<n;j++)
{
count++;
}
}
int a = 10;
while(a--)
{
count++;
}
他在内存中开辟了i j count a四个变量,然而空间复杂度应该是O(1),所以综上与时间复杂度类似。
显然再内存中开辟一个长度为n的数组的和比如5个变量,但是空间复杂度应该是O(N),所以这一点与时间复杂度相似。