数据结构笔记-序-复杂度

  • 通过直线l上一点p,做该点的垂线
    利用勾股定理,用12等分的线,每个等分点称为一个节点,p点上有一个节点,将p点左侧的第四个节点尽可能的拉直,同理,将p点右侧第3个节点沿直线l方向尽可能拉直,两条垂线就出来了

  • 算法
    有穷性 finiteness
    正确性 correctness

复杂度

  • 大O记号(big-o notation)

算法执行时间T(n)

存在正的常数c,对于任何n>>2的都有

T ( n ) ≤ c f ( n ) T(n) \leq cf(n) T(n)cf(n)

则认为n足够大后,f(n)是T(n)的渐进上界,记为

T(n)=O(f(n))

性质

对于任意常数c>0, O(f(n)) = O(cf(n)) ,即忽略正的常系数

对于任意常数 a>b>0 .有 O( n a + n b n^{a}+n^b na+nb) = O( n a n^a na) ,忽略多项式中低次幂,只保留高次幂

是最坏情况

( l o g n ) k &lt; n (logn)^k&lt;n (logn)k<n,无论k取多少

  • 证明 n = 2 l o g 2 n n= 2^{log_2n} n=2log2n,令t=logn ,转化问题为 t k , 2 t t^k ,2^t tk,2t之间比较大小

常见f(x) 排序:
1 , l o g n , n , n , n l o g n , n 2 , n 3 , . . . , 2 n , n ! 1,logn,{\sqrt n},n,nlogn,n^2,n^3,...,2^n,n! 1,logn,n ,n,nlogn,n2,n3,...,2n,n!

小o记号是小于,不能取等于
大O可以等于

  • Ω \Omega Ω记号
    最好情况

T ( n ) ≥ c g ( n ) T(n) \geq c g(n) T(n)cg(n)

g(n) 为渐进下界

运行时间不低于g(n)

  • Θ \Theta Θ记号
    对算法复杂度做出定量的界定

存在正常数 ,和函数h(n) ,对于任何n>>2 都有

则当n足够大时,h(n)给出了T(n)的确界,记为

T(n) = Θ \Theta Θ (h(n))

对于规模为n的任意输入,算法的运行时间T(n)都与 Θ \Theta Θ(h(n))同阶。即存在两个常数,c1,c2,使 c 1 h ( n ) ≤ T ( n ) ≤ c 2 h ( n ) c1h(n)\leq T(n) \leq c2h(n) c1h(n)T(n)c2h(n)

串行执行是取最大值
嵌套执行复杂度相乘

  • 空间复杂度
    空间负责度不算原始输入本身所占的空间

空间复杂度不会对于其执行基本操作的累计次数

每次基本操作所涉及的存储空间,都不超过常数规模,

时间复杂度本事就是空间复杂度的天然上界

  • 位运算
    j <<=1 : j *2
    指数级复杂度不能应用于实际中,不是有效算法
    在这里插入图片描述

递归(recursive)

递归结束条件 = 递归基 (base case of recursion)

  • 线性递归(linear recursion)
    每个递归实例对自身调用最多一次
    a(n)= a(n-1)+2

递归分析

  • 递归跟踪(recursion trace)
    • 分析递归算法总体运行时间和空间
      1. 算法的每个递归实例都表示为一个框,注明调用的参数
      1. 实例M调用实例NN,则在M与N对于的方框之间添加一条有向联线
        例如下[1]:
        在这里插入图描述
        时间复杂度O(n) ,空间复杂度O(n)
  • 递推方程
    • 一般表达式 和 递归基条件联立,求解

将递归转化为迭代,利用栈,模拟os,

主方法 the master method
在这里插入图片描述
一个问题分解为b部分,最后合并需要 O ( n d ) O(n^d) O(nd),则时间复杂度直接求。不是所有递归都可以套用。
在这里插入图片描述
参考
[1] 邓俊辉,数据结构(C++语言版), 第三版, 清华大学出版社, 2013年9月, ISBN: 7-302-33064-6

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值