计算机算法设计与分析学习笔记1

基本概念

程序 = 算法 + 数据结构

算法描述如何解决一类问题的一种方法,满足如下性质:

-输入:一类问题的实例
- 输出:针对实例的解
- 确定性:每条指令无歧义
- 有限性:有限循环

程序 不满足有限性性质, eg. 操作系统为无限循环。

为某一类问题设计算法,具体流程如下:

计算机算法设计与分析学习笔记1_第1张图片

算法复杂性分析

复杂性分析主要体现在:

  • 时间复杂性T(n)
  • 空间复杂性S(n)

其中,n 表征问题的规模大小。

算法的时间复杂性主要考虑:

  • 最坏情况下的时间复杂性,上界

    Tmax(n)=max{T(I)|size(I)=n} T m a x ( n ) = m a x { T ( I ) | s i z e ( I ) = n }

  • 最好情况下的时间复杂性, 下界

    Tmin(n)=min{T(I)|size(I)=n} T m i n ( n ) = m i n { T ( I ) | s i z e ( I ) = n }

  • 平均复杂性

    Tavg(n)=size(I)=np(I)T(I) T a v g ( n ) = ∑ s i z e ( I ) = n p ( I ) T ( I )

时间复杂度分析更侧重于渐进性复杂性分析,即

limnT(n)=? lim n → ∞ T ( n ) = ?

5种渐进符号

计算机算法设计与分析学习笔记1_第2张图片
计算机算法设计与分析学习笔记1_第3张图片
计算机算法设计与分析学习笔记1_第4张图片

注意:
4

即对于一个比较大的程序,通常由几步构成,其时间复杂度取决于最复杂的一步。

判断两个函数的渐进关系

给定函数, f(n), g(n), f(n) > 0, g(n)>0, 有如下定理:

定理1:

limnf(n)/g(n)=c,cf(n)=Θ(g(n)) lim n → ∞ f ( n ) / g ( n ) = c , c 为 常 数 ⇒ f ( n ) = Θ ( g ( n ) )

定理2:

limnf(n)/g(n)=f(n)=w(g(n)) lim n → ∞ f ( n ) / g ( n ) = ∞ ⇒ f ( n ) = w ( g ( n ) )

定理3:

limnf(n)/g(n)=0,cf(n)=o(g(n)) lim n → ∞ f ( n ) / g ( n ) = 0 , c 为 常 数 ⇒ f ( n ) = o ( g ( n ) )

常见函数

  • 常数
  • log(n) 多项式
  • n的多项式
  • 指数函数
  • 阶乘

注意:
计算机算法设计与分析学习笔记1_第5张图片

6

不同函数的渐进关系可通过前节的3个定理来判断。

Reference:

课件ch0.Introduction

你可能感兴趣的:(algorithm,design)