coursera Algorithm 课程 divide and conquer 第一周笔记(big O(算法复杂度分析))

O method(算法复杂度分析基本方法)

做big O 分析的原因:

  1. 对于高等级的算法分析要知道其“sweet spot”
  2. 能超越架构、语言、编译器等进行分析
  3. 在不同算法之间比较十分有用

三条假设(规则):

  1. 只针对时间最长(最坏情况做分析)
  2. 忽略那些常数项和低等级的项
  3. 只针对输入数据的规格(N)较大的情况下

常见的几种:

O ( 1 ) , O ( l o g N ) , O ( N ) , O ( N l o g N ) , O ( N 2 ) , O ( 2 N ) O(1),O(logN),O(N),O(NlogN),O(N^2),O(2^N)
时间复杂度上依次升高
在这里插入图片描述

各分析定义:

BIG O 分析的数学定义:
T ( N ) = O ( f ( N ) ) T(N)=O(f(N)) 的含义是:
如果存在一个C,N0,使所有 N > = N 0 N>=N0 的数都满足:
T ( N ) < = C f ( N ) T(N)<=C*f(N)
则我们说 T ( N ) = O ( f ( N ) ) T(N)=O(f(N))

Ω \Omega 分析的数学定义:
T ( N ) = Ω ( f ( N ) ) T(N)=\Omega(f(N)) 的含义是:
如果存在一个C,N0,使所有 N > = N 0 N>=N0 的数都满足:
T ( N ) > = C f ( N ) T(N)>=C*f(N)
则我们说 T ( N ) = Ω ( f ( N ) ) T(N)=\Omega(f(N))

Θ \Theta 分析的数学定义
T ( N ) = Θ ( f ( N ) ) T(N)=\Theta(f(N)) 的含义是:
如果存在一个 C 1 , C 2 , N 0 , C_1,C_2,N0, 使所有 N > = N 0 N>=N0 的数都满足:
C 1 f ( N ) = < T ( N ) < = C 2 f ( N ) C_1f(N)=<T(N)<=C_2*f(N)
则我们说 T ( N ) = Θ ( f ( N ) ) T(N)=\Theta(f(N))

练习例子:

2 2 n ! = O ( 2 n ) 2^{2n} !=O(2^n) :反证法
2 n + 10 = O ( 2 n ) 2^{n+10} = O(2^n)
2 n ! = O ( 2 n 1 ) 2^n!=O(2^{n-1})
m a x ( f , g ) = Θ ( f + g ) max(f,g) = \Theta(f+g)

发布了10 篇原创文章 · 获赞 0 · 访问量 101

猜你喜欢

转载自blog.csdn.net/xcpython/article/details/103839238
今日推荐