时间复杂度与空间复杂度

时间复杂度

时间复杂度: 由于机器设备的优劣,相同的代码在不同的机器上运行的时间长短会有所不同,因此时间复杂度指的不是代码程序的运行时间。我们都知道一段代码中的语句执行的次数是一定的,次数越多,则花费的时间就会越多,因此,时间复杂度指的是一个算法从开始运行到结尾过程中语句执行的次数。算法的执行次数也成为时间复杂度。
时间复杂度的表述: 时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,即时间复杂度是一个估值。
做一些求时间复杂度的举例:
(1)忽略常数项:
for(i=;i<N;i++)
{
printf("%d",i);
}
for(i=;i<5;i++)
printf(“haha”);
上面的代码的循环中代码执行次数为N次,循环外为5次,总共也就N+5次,当N较大时,5相对N来说就可以忽略不计。因此时间复杂度为O(N)。
(2)取高阶(忽略低阶项)且省略高阶常数项系数:

for(M=0;M<2;M++)
for(i=0;i<N;i++)
{for(j=;j<N;j++)
printf("%d",i);
}
for(i=0;i<N;i++)
printf(“呵呵”);
for(i=;i<5;i++)
printf(“haha”);
该段代码的执行次数为2NN+N+5;同样的常数项忽略不计,为2NN+N,取高阶后为2NN我们又说时间复杂度在表示的时候省略首项系数,因此该段代码的时间复杂度为O(N^2);同样时间复杂度为O(N3)的道理也是相同的。
常见的时间复杂度的比较:

O(1) O(log2) O(N) O(logN*N) O(N^2) O(N^3) O(2^N)
以上表述从左至右,时间复杂度从低到高。

空间复杂度

空间复杂度: 空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。当然随着时代的发展,计算机不管是从内存还是到各方面的性能都有了极大的进步,因此保证空间复杂度也已经不是一个算法或程序的侧重点了。
空间的使用:
程序执行时所占的空间分为以下两个部分:
(1)固定部分。该部分主要包括指令空间(即代码空间)、数据空间(常量、简单变量)等所占的空间。这部分属于静态空间。
(2)可变空间,这部分空间的主要包括动态分配的空间,以及递归栈所需的空间等。这部分的空间大小与算法有关。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值