zoukankan      html  css  js  c++  java
  • 算法设计与分析

    主定理的作用:求解递推方程。使用主定理,就可以不用迭代法。

    条件:得判断是否满足3个条件中的一个。

    T(n)=aT(n/b)+f(n)

    • n:解的规模
    • a:子问题的个数
    • n/b:归约后子问题的规模
    • f(n):除了子问题,要求解另外增加的计算代价,不参加递归。

    定理:设a>=1,b>=1,为常数,f(n)为函数,T(n)为非负整数,且T(n)=aT(n/b)+f(n),则有3个条件:

    下面是主定理的三大条件:

    1.f(n)=O(nlogba-ε)

    存在ε>0,就是当nlogba的阶高于f(n)时,可以存在ε使得nlogba-ε和f(n)的阶相同。

    此时取T(n)=θ(nlogba)。

    2.f(n)=Θ(nlogba)

    注意这时nlogba的阶和f(n)的阶相同,不需要ε。

    此时取T(n)=Θ(nlogbalogn)。

    3.f(n)=Ω(nlogba+ε)

    首先得存在ε>0,就是当nlogba的阶低于f(n)时,可以存在ε使得nlogba+ε和f(n)的阶相同。

    第二个要满足的条件是:af(n/b)<=cf(n), c<1。

    此时取T(n)=Θ(f(n))。

    来几道例题:

    例一:求解递推方程T(n)=9T(n/3)+n。

    a=9,b=3,f(n)=n。

    先判断nlogba=nlog39=n2,阶数高于n,存在f(n)=O(nlogba-ε)=O(n2-1),ε=1。

    满足主定理的条件1,所以T(n)=Θ(nlogba)=Θ(n2)。

    例二:求解递推方程T(n)=T(2n/3)+1。

    a=1,b=3/2,f(n)=1。

    先判断nlogba=nlog3/21=n0=1,和f(n)同阶。

    满足主定理的条件2,所以T(n)=Θ(nlogbalogn)=Θ(logn)。

    例三:求解递推方程T(n)=3T(n/4)+nlogn。

    a=3,b=4,f(n)=nlogn。

    先判断nlogba=nlog43≈n0.793,阶数低于nlogn,存在f(n)=Ω(n0.793+ε),给ε取0.2。

    还得判断是否满足不等式:af(n/b)<=cf(n),代入f(n)=nlogn,

    3n/4log(n/4)和cnlog(n),只要c>=3/4即可满足<=的关系。

    即满足主定理的条件3,所以T(n)=Θ(f(n))=Θ(nlogn)。

    总结一下,上面3例分别是主定理的3种满足条件的递推方程。实际上一直在判断nlogba和f(n)的阶,谁高,就取谁。同阶取Θ(nlogbalogn)。

    还有不能使用主定理的例子,这里就不列举了。这3个例子的来源是   算法设计与分析 屈婉玲教授  的课上举的例子。

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    互联网大厂CTO详解5大软件架构,看完这篇你就秒懂
    5-10年的DBA如何独当一面?这10个建议送给你(附图书工具推荐)
    2020 从新开始:你应该知道的Oracle认证新变化
    Centos7部署NFS实战
    你的公司,远程办公多久了?
    PostgreSQL的几种分布式架构对比
    数据库周刊 | DBA 核心技能
    理解redis 分布式中的分片机制
  • 原文地址:https://www.cnblogs.com/HIIM/p/12499319.html
Copyright © 2011-2022 走看看