算法复杂度分析(渐近记号)

【见解】关于算法复杂度的理解不能只停留在根据代码直接凭感官或者经验直接推测其公式(例如:根据for循环直接推测出一个O(n)复杂度,关于复杂度的理解更应该深入到其所代表的函数空间中去。

1.渐进记号

在这里插入图片描述
渐进记号:用来描述算法渐进运行时间的记号,其定义域为自然数集合 N = { 0 , 1 , 2 , 3... } N=\{0,1,2,3...\} N={ 0,1,2,3...}
【渐进记号可刻画算法的运行时间, 也可以刻画算法的某个其他方面(例如,算法的空间数量),甚至可以是和算法没有任何关系的函数。】

1.1 Θ \Theta Θ记号

【定义】
Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n))来表示以下函数的集合 Θ ( g ( n ) ) = { f ( n ) : 存 在 正 常 量 c 1 , c 2 和 n 0 , 使 得 对 所 有 n ≥ n 0 , 有 0 ≤ c 1 ∗ g ( n ) ≤ f ( n ) ≤ c 2 ∗ g ( n ) } \Theta(g(n)) = \{f(n):存在正常量c_1, c_2 和n_0,使得对所有 n\ge n_0, 有 0 \leq c_1*g(n) \leq f(n) \leq c_2*g(n)\} Θ(g(n))={ f(n):c1,c2n0使nn0,0c1g(n)f(n)c2g(n)}
该记号渐近得给出一个函数的上界和下界。

【谨记】
Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n))表示的是一个集合,可以记 f ( n ) ∈ Θ ( g ( n ) ) f(n)\in\Theta(g(n)) f(n)Θ(g(n)) 用来指出 f ( n ) 是 Θ ( g ( n ) ) 的 成 员 f(n)是\Theta(g(n))的成员 f(n)Θ(g(n)) Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n))的定义要求每个成员 f ( n ) ∈ Θ ( g ( n ) ) f(n)\in \Theta(g(n)) f(n)Θ(g(n))均为渐近非负,即当 n n n足够大时, f ( n ) f(n) f(n)非负。【渐近非负性对于其他渐近符号也成立】
因为任意常量是一个0阶多项式, 随意可以把任意常量函数表示成 Θ ( n 0 ) 或 Θ ( 1 ) \Theta(n^0)或\Theta(1) Θ(n0)Θ(1)

[练习1.1]
1.1 假设f(n)与g(n)都是渐进非负函数, 使用 Θ \Theta Θ 记号的基本定义来证明 max ⁡ ( f ( n ) , g ( n ) ) = Θ ( f ( n ) + g ( n ) ) \max(f(n), g(n))= \Theta(f(n) +g(n)) max(f(n),g(n))=Θ(f(n)+g(n))
解: 根据定义,要使上述条件成立,只需存在正常数 c 1 , c 2 , n 0 c_1, c_2, n_0 c1,c2,n0, 使得对于所有的 n ≥ n 0 n\ge n_0 nn0 c 1 ∗ ( f ( n ) + g ( n ) ) ≤ max ⁡ ( f ( n ) , g ( n ) ) ≤ c 2 ∗ ( f ( n ) + g ( n ) ) 成 立 c_1*(f(n) + g(n)) \leq\max(f(n), g(n)) \leq c_2* (f(n) + g(n)) 成立 c1(f(n)+g(n))max(f(n),g(n))c2(f(n)+g(n))
对于右边的不等号明显可知 f ( n ) + g ( n ) f(n)+g(n) f(n)+g(n)恒大于其中之一,可取 c 1 = 1 c_1=1 c1=1
对于左边的不等号,由于 f ( n ) 和 g ( n ) f(n)和g(n) f(n)g(n)具有交换性(因其无明确定义),假设 f ( n ) ≤ g ( n ) f(n)\leq g(n) f(n)g(n),则在 c 1 = 1 2 c_1 = \frac{1}{2} c1=21时成立
则 对于 c 1 =

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值