算法复杂性分析

博客简介

本博客是算法分析与设计H的复杂度分析方法总结,持续完善中…

1.复杂度分析的内容

算法复杂性 = 算法所需要的计算机资源,包括:

  • 算法的时间复杂性T(n)
  • 算法的空间复杂性S(n)。
  • 其中n是问题的规模(输入大小)

(1)时间复杂度分析

  • 最坏情况下的时间复杂性 Tmax(n) = max{ T(I) | size(I)=n }
  • 最好情况下的时间复杂性Tmin(n) = min{ T(I) | size(I)=n }
  • 平均情况下的时间复杂性Tavg(n) =
    在这里插入图片描述
    其中I是问题的规模为n的实例,p(I)是实例I出现的概率。
  • 算法渐近复杂性t(n)
    (T(n) - t(n) )/ T(n) =0 ,n→∞
    t(n)是T(n)的渐近性态,为算法的渐近复杂性。在数学上, t(n)是T(n)的渐近表达式,是T(n)略去低阶项留下的主项。它比T(n) 简单。

(2)空间复杂度分析

两部分:
固定部分

  • 它独立于实例的特征。
  • 主要包括指令空间、简单变量以及定长复合变量所占用的空间、常量所占用的空;

可变部分
要包括复合变量所需的空间(其大小依赖于所解决的具体问题)、动态分配的空间(依赖于实例的特征)、递归栈所需的空间(依赖于实例特征)

令S(P)表示程序P需要的空间,则有 S ( P ) = c (固定部分)+ SP(可变部分)

2.渐近分析的记号和性质

渐近分析的记号

在下面的讨论中,对所有n,f(n) >=0,g(n) >= 0。

(1)上界记号

  • 渐近上界记号大O :
    O(g(n)) = { f(n) | 存在正常数c>0和n0>0,使得对所有n>= n0有: 0 <= f(n) <= cg(n) }

  • 非紧上界记号小o :
    o(g(n)) = { f(n) | 对于任何正常数c>0,和n0 >0,使得对所有n>=n0有:0 =<f(n) < cg(n) }
    等价于 f(n) / g(n) →0 ,as n→∞

(2)下界符号

  • 渐近下界记号Ω
    Ω (g(n)) = { f(n) | 存在正常数c和n0使得对所有n>=n0有: 0<=cg(n) <=f(n)
  • 非紧下界记号ω
    ω (g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0 >0使得对所有n>=n0有:0 <=cg(n) < f(n) }
    等价于 f(n) / g(n) →∞ ,as n→∞。
  • f(n) ∈ω(g(n)) < = > g(n)∈o (f(n))

(3)紧渐近界记号 Θ

Θ(g(n)) = { f(n) | 存在正常数c1,c2和n0使得对所有n>= n0有:c1g(n) <= f(n) <= c2g(n) }

  • 定理1: Θ (g(n)) = O (g(n)) ∩ ω(g(n))
  • 简单来说O(f(n))和ω(f(n))同阶
  • 最优算法:问题的计算时间下界为Ω(f(n)),则计算时间复杂性为O(f(n))的算法是 最优算法。

例如,排序问题的计算时间下界为Ω(nlogn),计算时间复杂性为 O(nlogn)的排序算法是最优算法。

渐近分析的记号的性质

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3.渐近分析中常用的函数

(1)单调函数
在这里插入图片描述
(2)取整函数
在这里插入图片描述
在这里插入图片描述
(3)多项式函数
在这里插入图片描述
(4)指数函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(6)阶层函数
在这里插入图片描述
在这里插入图片描述

4.算法分析的方法

基本原则:

• for / while 循环 :循环体内计算时间 * 循环次数;
• 嵌套循环 :循环体内计算时间*所有循环次数;
• 顺序语句 :各语句计算时间相加;
• if-else语句 :if语句计算时间和else语句计算时间的较大者。

(1)非递归算法:

  • 标记count

  • 分析计算频次

  • 利用化简公式化简

  • 举例1:顺序查找

template<class Type>
int seqSearch(Type *a, int n, Type k)
{
     for(int i=0;i<n;i++)
	  if (a[i]==k) return i;
     return -1;
}

在这里插入图片描述

  • 举例2:insert_sort排序

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(2)递归算法

  • 写出递推关系式
  • 根据递推关系解通项公式
  • 或者利用主定理

主定理

在这里插入图片描述

  • 举例:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值