【算法设计zxd】第2章 分析基础——渐近的界,基本效率类型

多数情况:贪心>动态规划【同阶,但是系数不同】

增长的记号: O渐近上界,o f比g低阶,Ω渐近下界,ω f比g高阶,Θ渐近紧界

算法效率评价的指标:

算法对计算机资源的使用:

        1.计算资源(时间)

                

         2.存储资源(内存)

                

 计算机资源的计量方法:

设输入数据/问题规模为n。假设算法要用到:

  1. (1)m元运算;
  2. (2)每种元运算执行的时间t1,t2,…,tm
  3. (3)每种元运算执行的次数为e1,e2,…,em
  4. (4)元运算与问题规模的关系:ei (n)1≤i≤m

 若用T(n)表示对资源占用的时间,成为时间复杂性函数,则有

【 时间复杂度 = m种元运算的 执行时间*执行次数  的和】

qwl:

问题:

 

 

 算法:

  • 算法时间复杂度:针对指定基本运算,计数算法所做运算次数。
  • 基本运算:比较,加法,乘法,置指针,交换。
  • 输入规模:输入串编码长度。常用下述参数度量:数组元素多少,调度问题的任务个数,图的顶点数与边数。
  • 算法基本运算次数 可表为 输入规模的函数。
  • 给定问题和基本运算就决定了一个算法类。

输入规模:

 基本运算:
​​​​​​

 算法的两种时间复杂度:

 

例子:元运算的提取及占用资源时间的计算:

【例2-1】输出n*n三角矩阵,,试分析该算法的时间复杂度。

 

 

次数最多 ---4
k++算一个 
printf 算一个
j<=i判断次数多一次 
j++

次数次多 ---5
i<n 
i++
j=0
for循环一整个 
printf("\n")

最少(一次)---5
定义
赋值
scanf 
i=0
for循环一整个
 
 

数学基础:

函数的渐近的界

算法A的时间复杂性函数:T(n)

问题规模:n

渐近态:T'(n)

存在T'(n) 使得n足够大时:(T-T')/T -> 0 

增长的阶:

描述算法的效率——增长率。

忽略低阶项,保留最高阶项。

忽略常系数。

利用O(n^2)表示插入排序的最坏运行时间。——表示增长率和n^2相同

渐进效率:

  •         输入规模非常大
  •         忽略低阶项和常系数
  •         只考虑最高阶(增长的阶)
定义2.1 f g 是定义域为自然数集N上的函数。
(1) c>0 n 0 >0 使得所有 n  ≥ n0   , 0 ≤ f(n)  ≤ c*g (n )成立, 则称 f(n) 渐近上界 g(n), 记作 : f(n)=Ο(g(n))
(2) c>0 n 0 >0 使得所有的n  ≥ n0   , 0 ≤ c*g(n) ≤ f(n) ,则 称 f(n) 渐近下界 g(n), 记作 : f(n)=Ω(g(n))
  • 描述运行时间的最好情况。---最小,最起码。
  • 对所有输入都正确。
  • 可以用来描述问题
    • 如,排序问题的时间复杂性是Ω(n)
(3) 若对于 c>0 都存在非负整数 n 0 , 使得当 n≥ n 0 时有0 ≤ f(n)  < c*g (n) 成立,则称函数 f(n) n 充分大时, g(n)低阶,记为 f(n)=o(g(n))
(4) ∀c>0 都存在 n 0 >0 ,使得当n≥ n0时有0 ≤ c*g (n )  f(n)  成立,则称函数f(n) g(n) 高阶,记为 f(n)=ω(g(n))
(5) f(n)=Ο(g(n)) f(n)=Ω(g(n))时,则记 f(n) = Θ(g (n )), 称g(n) f(n) 渐近的紧的界 f(n) g(n)同阶。   c 2 g(n)≤f(n)≤c 1 g(n)

 

例:素数测试{qwl} 

思考题:

 

 【例2-2】设有函数f(n)=n**2+3n+1,当n足够大时,试证明下述内容:

(1) f(n)=O(n** 2 ) f(n)=O(n** 3 ) 成立;
(2) f(n)=o(n** 2 ) 不成立。
证明:
(1) f(n)=n** 2 +3n+1< n** 2 +3n** 2 +n** 2 =5n** 2 存在 c=5 使得当 n≥1时f(n)=O(n** 2 ) 成立。
又因为 5n** 2 ≤5n** 3 ,所以,存在 c=5 使得当 n≥1 时, f(n)=O(n** 3 ) 成立。
(2) 要使 n** 2 +3n+1<n** 2 就要使 1+3/n+1/n 2 <1 ,显然这不成立。
也就是说,找不到一个 n 0 ,当 n≥n 0 c为任意小时,使得 f(n)=o(n 2 ) 成立。

定理 2.1( 传递性 ) f g h 是定义域为自然数集合,
如果 f=O(g) g=O(h) ,那么 f=O(h)
如果 f=Ω(g) g=Ω(h) ,那么 f=Ω(h)
如果 f=Θ(g) g=Θ(h) ,那么 f=Θ(h)
定理 2.2 f=O(h) g=O(h) ,那么 f+g=O(h)
证明:根据定义,
存在某个常数 c 1 n 1 ,对所有的 n≥n 1 f(n)≤c 1 h(n)
存在某个常数 c 2 n 2 ,对所有的 n≥n 2 ,有 g(n)≤c 2 h(n) 。则有
f(n)+ g(n) ≤c 1 h(n)+c 2 h(n)=(c 1 + c 2 )h(n) c=c 1 +c 2
n 0 =max{n 1 ,n 2 } ,当 n≥n0 时,有 f(n) +g(n) ≤ch(n),因此 f+g=O(h)
推广: f 1 +f 2 +…+f m =O(h)
m要远小于问题规模n
注意:
定义 1,2 中的 c,n 0 是存在的
定义 2,3 c 是任意小的 (ε) 必须找到 n 0
定义 5( 请注意那个眼神 )

常用的渐进函数及其渐近的界

证明不同底的对数 是同阶:1用定义 2.一比是常数
重要结果:
1.多项式函数的阶 低于 指数函数的阶——反复洛必达
1.多项式函数的阶 高于 对数函数的阶
对数低于多项式;多项式低于指数

 对数函数的阶低于幂函数的阶

利用极限求函数渐近的界

 

 

 

 

 

 

 

比如汉诺塔是 2^n

 

有用的求和级数及推导方法:

 

 

 

基本效率类型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值