时间复杂度T(n)

1:概念

T(n)被称为时间复杂度,一般为在某个算法中操作步骤的重复次数与问题规模n的关系,下面一一举例说明

2:具体说明

2.1:常数阶o(1)

无论代码有多少行,只要没有循环等复杂的结构,其算法时间复杂度就是1为常数,如

int i =1;
in j = 0;
i++;
j--;
//该代码没有循环,且不论i和j的值有多大,其操作语句的重复次数都是固定的!

2.2:对数阶O(log2n)

示例代码

int n=100;
int i =1
while(i<n){
    i = 2*i;
}//该循环的次数与n有着很大的关系,每次循环i都乘以2。

分析可知,循环次数x与n有很大的关系,假如循环了x次后,推出了循环,则有2^x = n则,重复次数x = log(2n),此为对数阶的分析。

2.3:线性阶O(n)

示例代码

int n =x;
for(int i =0;i<n;i++){        
}//该算法的是线性阶,算法的重复次数等于变量n,即n多少就要重复多少次

O(n)该循环的重复次数与变量n息息相关!即为n

2.4:线性对数阶O(nlogn)

从名字上可以分析,假设一个算法是对数阶的即O(logn),则将其根据n来循环n遍,则得到的算法的操作重复次数为nlogn,即O(nlogn)

示例代码如下:

for(int i=0;i<n;i++){
    int j = 1;
    while(j<n){
        j = j*2;
    }
}

内部while循环,的时间复杂度为O(log2n),而外部的为n,则总的操作重复次数为O(nlog2n),即线性对数阶

2.5:平方阶O(n^2)

依然分析该时间复杂度,我们已经直到O(n)对应的算法是循环n次的,而O(n^2)则只需要n次循环里面再套用n次循环的情况即可。

代码实例。

int n ;
for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
  
  }
}

很好理解咯,当然立方阶也可以以此类推!

2.6:指数阶O(2^n)

指数阶是最恐怖的,当n较小时带来的时间复杂度还可以接受,但是一旦当n大于10时带来的指数变化的重复操作将是致命的!所以运用中要极力避免使用指数阶的算法。

代码实例

猜你喜欢

转载自www.cnblogs.com/dazhu123/p/12344275.html
今日推荐