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

本文探讨了贪心算法和动态规划在大多数情况下虽同阶但系数不同的现象,通过O、Ω、ω和Θ渐近界限,详细解析了算法效率评估的标准,包括计算资源的时间复杂度和存储资源的内存使用。举例分析了输出三角矩阵的算法时间复杂度,并证明了函数f(n)的渐近界。还介绍了算法效率类型的定义与传递性定理,以及对不同算法类别的效率分析。

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

增长的记号: 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>0n0>0使得所有 n ≥ n0 , 0 ≤ f(n)  ≤ c*g (n )成立, 则称f(n)渐近上界g(n),记作 : f(n)=Ο(g(n))
(2)c>0n0>0使得所有的n ≥ n0 ,0 ≤ c*g(n) ≤ f(n) ,则 称f(n)渐近下界g(n),记作 : f(n)=Ω(g(n))
  • 描述运行时间的最好情况。---最小,最起码。
  • 对所有输入都正确。
  • 可以用来描述问题
    • 如,排序问题的时间复杂性是Ω(n)
(3)若对于 c>0都存在非负整数n0,使得当n≥ n0时有0 ≤ f(n) < c*g (n)成立,则称函数f(n)n充分大时,g(n)低阶,记为 f(n)=o(g(n))
(4)∀c>0都存在n0>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)同阶。  c2g(n)≤f(n)≤c1g(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/n2<1,显然这不成立。
也就是说,找不到一个n0,当n≥n0c为任意小时,使得 f(n)=o(n2)成立。

定理2.1(传递性) fgh是定义域为自然数集合,
如果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)
证明:根据定义,
存在某个常数c1n1,对所有的n≥n1f(n)≤c1h(n)
存在某个常数c2n2,对所有的n≥n2,有g(n)≤c2h(n)。则有
f(n)+ g(n) ≤c1h(n)+c2h(n)=(c1+ c2)h(n)c=c1+c2
n0=max{n1,n2},当n≥n0时,有f(n) +g(n) ≤ch(n),因此 f+g=O(h)
推广:f1+f2+…+fm=O(h)
m要远小于问题规模n
注意:
定义1,2中的c,n0是存在的
定义2,3c是任意小的(ε) 必须找到n0
定义5(请注意那个眼神)

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

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

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

利用极限求函数渐近的界

 

 

 

 

 

 

 

比如汉诺塔是 2^n

 

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

 

 

 

基本效率类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值