一.课堂笔记
图中代表例1-4的解题过程,采用的是等差数列通项公式,其中,重点是1、时间复杂度可以根据程序运行的次数来判断2、时间复杂度的系数可以忽略 3、出现几个次项时,最高次项代表他时间复杂度。
二.例题
1.常数阶O(1)
for(i=1;i<=5;i++)
{
i = k ;
k++;
}
当i=1时,k=2;
当i=2时,k=3;
......
这段代码里只有常量,所以时间复杂度只有O(1)
2.线性时间复杂度 O(n)
for(i=1;i<=n;i++)
{
i=k;
k++;
}
for循环里面的代码会执行n遍,因此它消耗的时间是随着n的变化而变化的,因此这类代码都可以用O(n)来表示它的时间复杂度
3.对数复杂度 O(log n)
int i = 1;
while (i<=n){
i = i*2;
}
从代码中可以看出,变量 i 的值从 1 开始取,每循环一次就乘以 2。当大于 n 时,循环结束。每次i乘以2之后,就距离n更近了一分,有多少个2相乘后大于n,则会退出循环,则2x=n得到x=log2n。所以这个循环的时间复杂度为O(logn)
4.线性对数复杂度 O(nlog N)
for(i=1;i<n;i++)
{
m=1;
while(m<n)
{
m=m*2;
}
}
将时间复杂度为O(logn)的代码循环N遍的话,那么它的时间复杂度就是 n * O(logN),也就是了O(nlogN)
5.平方阶 O(n^2)
for (int i=o;i<n;i++){
for (int j=0;j<n;i++){
n++;
}
}
外层i共循环n次,内层j共循环n次,所以总共循环n*n=n^2=O(n^2)
立方阶就是三层n循环
6.指数阶O(2^n)
7.阶乘
.........