数据结构(二)时间复杂度概念
作者:秋名
撰写时间:2020 年 6 月 10 日
算法就是计算机解题的过程
用高斯求和的方法。这是一个等差数列,公式是du:(首项+末项)×项数zhi÷2
则原dao式=(1+100)×100÷2
=101×100÷2
=10100÷2
=5050
##时间复杂度(Time Complexity)定义
##时间频度(数据结构频度指的是执行的次数,时间频度指的是执行的时间)
##时间复杂度
##时间复杂度计算
##时间复杂度举例
n代表数据的个数,时间复杂度中描述的是n趋近于无穷的情况。
O(1) 表示消耗的时间与数据的规模是没有关系的。
O(n) 说明这个算法的运行时间与数据的个数(n)呈线性关系
1、一个简单语句的时间复杂度为O(1)
int count = 0;
时间复杂度:T(n)=O(1)
2、100个简单语句的时间复杂度也为O(1) //100是常数,不是趋向无穷大的n
int count = 0;
时间公式:T(n)=1
时间复杂度:T(n)=O(1)
3、一个循环的时间复杂度为O(n)
int n=8;count=0;
for(int i=1;i<=n;i++)
count++; //基础语句
时间公式:T(n)=n;
时间复杂度:T(n)=O(n);
4、时间复杂度为O(log2n)的循环语句。
int n=8;count=0;
for(int i=1;i<n;i*=2)
count++;
1 2 4 8 16 32
2^30=1024*1024*1024=1000*1000*1000=10亿
5、时间复杂度为O(n2)的二重循环。
int n=8,count=0;
for(int i=1;i<=100n;i++)//100n是常数n,结果==n
for(int j=1;j<=10n;j++)//10n是常数n,结果==n
count++;
时间公式:T(n)=100n*10n=1000n*n;
时间复杂度:T(n)=O(n*n);
6、时间复杂度为O(nlog2n)的二重循环。
int n=8,count=0;
for(int i=1;i<=n;i*=2)
for(int j=1;j<=n;j++)
count++;
n*log2n
7、时间复杂度为O(n2)的二重循环
int n=8,count=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)//j<=i
count++;
1+2+3+4....+n=时间频度:(1+n)*n/2
时间复杂度:T(n)=O(n2)
图解:
常用的时间复杂度级别:(尽量控制在立方阶以上,以下执行效率低)
常数阶O(1)
对数阶O(log2n)
线性阶O(n)
线性对数阶O(n*log2n)
平方阶O(n2)
立方阶O(n3)
...
k次方阶O(nK)
指数阶O(2n)
阶乘阶O(n!)