【算法】M-01主项定理Master Method

本文详细解释了主项定理的使用方法及其条件,并通过多个实例展示了如何利用该定理来确定递归算法的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原博主链接:http://blog.youkuaiyun.com/rizejin/article/details/5916833

主项定理所需条件:
递归方程如下
T(n) = a * T(n/b) + f(n)
a >= 1, b  > 1, f(n)为简单函数



判断n^log (a)与h(n)的大小关系

= Θ(h(n)) :该方法的复杂度为   Θ(h(n)*lg(n))

> Θ(h(n)) :该方法的复杂度为   Θ(n^(log a/log b))

< Θ(h(n)) :该方法复杂度为 Θ(h(n))


eg:

T(n) = T(n/2)+1:Θ(log(n))(二分查找)


T(n) = 2T(n/2)+n :Θ(n*log(n))(归并排序)


n^log b (a)其实相当于用递归树方法解出的递归方程的右侧的第一项,
而f(n)则是递归方程的右侧的第二项,这样,主项定理实际上是在比较组成结果的两个函数项,
而且这种比较是按照数量级(或者说是变化幅度)来比较的,也就是说,如2n 与 28n是
数量级(变化幅度)相当的。

这样就有了三种不同的情形:

  1. f(n) < nlogba                

    也就是 f(n) = O(nlogba -e) ,e > 0为任意小的常数
    或者说,f(n) 比 nlogba变化的慢,慢ne
    那么,T(n) Î Q (nlogba)

  2. f(n) > nlogba          

    也就是 f(n) = W(nlogba +e) ,e > 0为任意小的常数
    或者说,f(n) 比 nlogba变化的快,快ne
    那么, T(n) Î Q(f(n))

    可以简单地说,递归方程的右侧的两项,哪项变化的块,T(n)就属于哪项的数量级

  3. f(n) = nlogba

    也就是两项的数量级相当,就给这个数量级乘上一个lg n

    T(n) Î Q(nlogba * lg n)

 


Examples(以下示例来源于网络):

  1. T(n) = 5T(n/2) + Q(n2)

    Case 1: If f(n) = O(nlogba -e) for some constant e > 0 then T(n)ÎQ(nlogba)

    Determine: a, b, f(n) and logba

    • a = 5

    • b = 2

    • f(n) = Q(n2)

    • logb a = log2 5 ≈ 2.32

    Is f(n) Î O(nlg 5 -e) fore > 0 ?

    Yes. f(n) = Q(n2)Î O(nlg 5 -e) = O(n2.32 -e) fore ≈ 0.32

    T(n) Î Q(nlog25)


2. T(n) = 2T(n/2) + n

Determine: a, b, f(n) and logb(a)

  • a = 2

  • b = 2

  • f(n) = n

  • logb a = log2 2 = lg 2 = 1

Case 3: If f(n) = Q(nlogba) then T(n)Î Q(nlogba lg n)

f(n) = n Î Q(nlog22) =Q(n1)

T(n) Î Q(nlog22 lg n) =Q(n lg n)


3. T(n) = 5T(n/2) + Q(n3)

Determine: a, b, f(n) and logb(a)

  • a = 5

  • b = 2

  • f(n) = Q(n3)

  • logb a = log2 5 ≈ 2.32

Case 2: If f(n) = W(nlogba+e) for some constant e > 0

f(n) = Q(n3)ÎW(nlog25+e) = W(n2.32+e) fore ≈0.68

and af(n/b) ≤ cf(n) for some constant c < 1 and all sufficiently large n

5(n/2)3 ≤ cn3

5n3/8 ≤ cn3

c = 5/8 < 1

then T(n) Î Q(n3)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值