-----------加粗样式----start reading---------------
时间复杂度
定义
时间复杂度:执行一个算法,代码运行的次数和问题规模之间的函数关系, O(f(n)),又叫大O阶
时间复杂度只是计算一个大致的时间,所以只算最高次去除系数的时间复杂度如O(n),O(n2),O(n3)
O(1):常数项,和问题规模无关
举例
int main()
{
int i;
int n=10;
int temp=0;
for(i=1;i<=n;i++)
{
temp+=i;
}
return 0;
}
运行次数:1,2,3……10(一到十的和,运行十次)
运行了n次
for(i=1;i<**加粗样式**=n;++i) (1)
{
for(j=1;j<=n;++j) (2)
{**加粗样式**
c[i][j]=0 (3)
for(k=1;k<=n;k++) (4)
{
c[i][j]+=a[i][k]*b[k][j] (5)
}
}
}
(1)运行n次
(2)运行nn次
(3)运行nn次
(4)运行nnn次
(5)运行nnn次
一共运行n+2n2+2n3
空间复杂度计算最高次项,去除系数,所以上一段代码块时间复杂度为O(n3)
for(i=1;i<n;i*=2)
{
x+=1
}
n的值 1 2 4 8 16 ……n
运行次数 1 2 3 4 5……?
运行x次到n
2x=n
x=log 2 (n)
时间复杂度为O(log 2(n))
经过三个例题,相信大家应该知道如何计算时间复杂度了吧,最笨但是最准确的办法就是自己跑程序,数运行次数,当然,是有效的数,找规律的数
空间复杂度
定义
空间复杂度:执行一个算法,需要额外的辅助空间和问题规模之间的函数关系,用O(f(n))表示
再内存区域里分为
全局变量区
栈区
静态变量区
堆
代码段
运行不同的代码就需要占用不同地方的内存,也就是相应的空间,就涉及到空间复杂度。
具体实践我会在下一篇“递归”中给大家介绍~~
---------------END---------------