时间复杂度与空间复杂度

本文围绕算法的时间复杂度和空间复杂度展开。介绍了时间复杂度,将算法执行时间看作解决问题的总步数,有最好、最坏、平均情况,通常说的是最坏情况,还给出复杂度大小关系示例;也提及空间复杂度,其计算公式为S(n) = O(f(n))。

近期我的一个学弟参加了一部分面试, 说是经常会被问到有关算法的时间复杂度问题,虽然我对于算法也是一般的水平,但是我写了这样一篇类似于介绍或者说是总结类的东西给他,顺便自己也温习一下,也就顺带着发在这里了,大神请无视,如有错误,请不吝指正,不胜感激。转载请注明出处。

时间复杂度

把算法程序中的每一步看做一个基本的计量单位,那么一个算法的执行时间就可以看做解决一个问题所需要的总步数。由于算法的执行过程又各不相同,所以每一步(计量单位)怎麽去选择就成为一个问题。

    T(n) = n  1, 当数据的规模越来越大时,T(n)函数中的某一部分掩盖了其他部分对函数的影响。

数量级 函数用来描述当规模n增加时,T(n)函数中增长最快的的部分,这个数量级函数我们一般用大O表示,记做 O(f(n0))。

    有时算法的运行时间,不仅取决于问答题规模的大小,还取决于具体数据:这样的算法,我们将它的执行情况分为 最有情况、最坏情况、平均情况。

最好情况:某个特定的数据集能让算法的执行情况极好。

最坏情况:另一个不同的数据会让算法的执行情况变得极差

平均情况:大多数数据介于两种极端情况之间。

最坏情况提供了一种保证,这个保证运行时间将不会在坏了,所以通常我们说的时间复杂度都是最坏情况下的时间复杂度。

O(1) <  O(logn)  < O(n)  < O(nlogn)  < O(n²)  < O(n³)  < O(2ⁿ)

 

对数函数: cnt = 1 

                while  cnt < n :

                    cnt *= 2  #看成是cnt乘以多少个2以后才能大于等于n, 2的x次方等于n,  x = ㏒n

 

a= 1

b = 2 

c = 3       #执行次数3

 

 

for i in range(n):

    for j  in range(n):

        x = i * i 

        y = j * j 

        z = i * j             #执行次数3n²

 

for k in range(n):

    u = a*k + b 

    v = c*c              #执行次数2n

 

d = 4      #执行次数1

 

T(n) = 3 + 3n² + 2n + 1 = 3n² + 2n + 4

看到此算法以n²作为主导,所以当n 增大时,这片代码的数量级就是O(n²)

 

空间复杂度

该算法所耗费的存储空间 ,计算公式 S(n) = O(f(n)) 其中n为数据的规模,f(n)在这里指的是n所占存储空间的函数。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值