数据结构-序-复杂度

  • 通过直线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)

则认为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 ) = O( n a n^a ) ,忽略多项式中低次幂,只保留高次幂

是最坏情况

  • Ω \Omega 记号
    最好情况

T ( n ) c g ( n ) T(n) \geq c g(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))同阶

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

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

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

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

  • 位运算
    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,

参考
[1] 邓俊辉,数据结构(C++语言版), 第三版, 清华大学出版社, 2013年9月, ISBN: 7-302-33064-6

猜你喜欢

转载自blog.csdn.net/qq_38420683/article/details/86476759