一、时间复杂度
一层循环(需要注意的是,不要想当然的直接看时间负责度)
i=n*n;
while(i!=1){ i = i /2};
t(循环次数) = 0、1、2、3、...
i(当前循环次数对应的i值)=、、、、...
综上,i值规律为:i=
而循环停止条件为i=1
将i=1代入i=可得:1=,即
因此时间复杂度为
需要注意的是,时间复杂度本质是在求t(次数)与n之间的关系
而最后得出结论必然有两个公式,一个是规律的式子,一个是停止条件的式子
二层循环
int m = 0;
for(int i = 1;i <=n; i++)
{
for(int j = 1; j <= 2*i; j++)
{
m++;
}
}
与一层循环锚定次数t不同的是,二层循环锚定的是最外层循环的i值(本质其实也是次数)
而解出时间复杂度的思路也完全不一样
i=1、2、3、4、...、n
i值对应的下一层的循环次数=2、4、6、8、...、2n
综上,i=n时,循环的执行次数=2+4+6+8+...+2n==(等差求和)
而时间复杂度=O()
这里需要注意
等差求和公式为
等比求和公式为
多层循环
这个之后再单独学习