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时带来的指数变化的重复操作将是致命的!所以运用中要极力避免使用指数阶的算法。
代码实例