主定理(简化版)

主定理(Master Theorem)是用于分析递归算法时间复杂度的一个重要工具。它适用于形式化定义的一类递归关系,通常采用分治策略解决问题的情况。

假设我们有一个递归算法,它将问题分解成 a a a 个子问题,每个子问题的规模是原问题的 1 b \frac{1}{b} b1,解决每个子问题的代价是 T ( n b ) T(\cfrac{n}{b}) T(bn),而将子问题的解合并成原问题的解的代价是 f ( n ) f(n) f(n)。那么该递归算法的时间复杂度可以表示为:
T ( n ) = a ⋅ T ( n b ) + f ( n ) T(n)=a·T(\frac{n}{b})+f(n) T(n)=aT(bn)+f(n)
其中, a ≥ 1 , b > 1 a ≥ 1,b > 1 a1b>1 是常数, T ( n ) T(n) T(n) 是解决一个规模为 n n n 的问题所需的工作量, f ( n ) f(n) f(n) 是合并子问题的解的工作量。

主定理的三种情况:

  1. I F IF IF f ( n ) = O ( n l o g b ( a − ε ) ) f(n) = O(n^ {log_b(a - ε)}) f(n)=O(nlogb(aε)),and ε > 0 ε > 0 ε>0,Then T ( n ) = Θ ( n l o g b ( a ) ) T(n) = Θ(n^{log_b(a)}) T(n)=Θ(nlogb(a))
  2. I F IF IF f ( n ) = Θ ( n l o g b ( a ) ⋅ l o g k n ) f(n) = Θ(n^{log_b(a)} ·log^k n) f(n)=Θ(nlogb(a)logkn),and k ≥ 0 k ≥ 0 k0,Then T ( n ) = Θ ( n l o g b ( a ) ⋅ l o g k + 1 n ) T(n) = Θ(n^{log_b(a)} · log^{k+1} n) T(n)=Θ(nlogb(a)logk+1n)
  3. I F IF IF f ( n ) = Ω ( n l o g b ( a + ε ) ) f(n) = Ω(n^{log_b(a + ε)}) f(n)=Ω(nlogb(a+ε)),and ε > 0 ε > 0 ε>0 a ⋅ f ( n b ) ≤ c ⋅ f ( n ) a · f(\frac{n}{b}) ≤ c · f(n) af(bn)cf(n) 对于某个常数 c < 1 c < 1 c<1 和所有足够大的 n n n 成立,Then T ( n ) = Θ ( f ( n ) ) T(n) = Θ(f(n)) T(n)=Θ(f(n))

情况一:

T ( n ) = 4 T ( n 2 ) + n T(n)=4T(\frac{n}{2})+n T(n)=4T(2n)+n

其中 a = 4 ≥ 1 , b = 2 > 1 , f ( n ) = n , l o g 2 4 = 2 > 1 a = 4\ge1,b = 2>1,f(n) = n,log_{2}4=2>1 a=41b=2>1f(n)=nlog24=2>1

根据主定理的第一种情况: f ( n ) = O ( n l o g b ( a − ε ) ) f(n) = O(n^ {log_b(a - ε)}) f(n)=O(nlogb(aε))

可得 n = O ( n l o g 2 ​ 4 − ε ) = O ( n 2 ) n=O(n^{log_{2}​4−ε})=O(n^{2}) n=O(nlog2​4ε)=O(n2)

∴ T ( n ) = Θ ( n 2 ) \therefore T(n)=Θ(n^{2}) T(n)=Θ(n2)


情况二:

T ( n ) = 4 T ( n 2 ) + n 2 T(n)=4T(\frac{n}{2})+n^{2} T(n)=4T(2n)+n2

其中 a = 4 ≥ 1 , b = 2 > 1 , f ( n ) = n 2 , l o g 2 4 = 2 a = 4\ge1,b = 2>1,f(n) = n^{2},log_{2}4=2 a=41b=2>1f(n)=n2log24=2

根据主定理的第二种情况: f ( n ) = O ( n l o g b ( a ) l o g k n ) f(n) = O(n^ {log_b(a )}log^{k}n) f(n)=O(nlogb(a)logkn)

可得 n 2 = Θ ( n l o g 2 ​ 4 l o g 0 n ) = Θ ( n 2 ) n^{2}=Θ(n^{log_{2}​4}log^{0}n)=Θ(n^{2}) n2=Θ(nlog2​4log0n)=Θ(n2)

∴ T ( n ) = Θ ( n 2 l o g n ) \therefore T(n)=Θ(n^{2}logn) T(n)=Θ(n2logn)


情况三:

T ( n ) = 2 T ( n 2 ) + n 2 T(n)=2T(\frac{n}{2})+n^{2} T(n)=2T(2n)+n2

其中 a = 2 ≥ 1 , b = 2 > 1 , f ( n ) = n 2 , l o g 2 2 = 1 < 2 a = 2\ge1,b = 2>1,f(n) = n^{2},log_{2}2=1<2 a=21b=2>1f(n)=n2log22=1<2

根据主定理的第三种情况: f ( n ) = Ω ( n l o g b ( a ) + ε ) f(n) = Ω(n^ {log_b(a )+ε }) f(n)=Ω(nlogb(a)+ε)

可得 n 2 = Ω ( n l o g 2 ​ 2 + ε ) = Ω ( n 1 + ε ) n^{2}=Ω(n^{log_{2}​2+ε})=Ω(n^{1+ε}) n2=Ω(nlog2​2+ε)=Ω(n1+ε)

但我们还需要检查是否满足 a ⋅ f ( n b ) ≤ c ⋅ f ( n ) a · f(\frac{n}{b}) ≤ c · f(n) af(bn)cf(n) 的条件:

2 ⋅ ( n / 2 ) 2 ≤ c ⋅ n 2 n 2 / 2 ≤ c ⋅ n 2 1 / 2 ≤ c 2·(n/2)^{2}≤c·n^{2}\\ n^{2}/{2}≤c·n^{2}\\ 1/2≤c 2(n/2)2cn2n2/2cn21/2c

对于任何小于 1/2 的常数 c c c,上述不等式都成立

∴ T ( n ) = Θ ( n 2 ) \therefore T(n)=Θ(n^{2}) T(n)=Θ(n2)


  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Matlab是一种强大的数值计算和数据可视化软件,它提供了各种统计分析工具,包括用于验证伯努利大数定理(Bernoulli's Law of Large Numbers)的函数或方。伯努利大数定理描述了当大量独立随机事件的结果被重复测量时,平均值会越来越接近其期望值的现象。 在Matlab中,你可以使用模拟实验或者数值统计函数来演示这个定理。以下是一个简单的步骤: 1. **创建随机变量**:使用`randi(0,1,N)`生成一系列的0和1的随机数,其中N是你想要模拟的试验次数。这代表了每次实验中成功的(通常是1)或失败的(通常是0)情况。 2. **计算频率**:对每次实验中成功的次数进行累计,然后除以总试验次数,得到单次实验的成功概率近似值。 3. **重复实验**:多次运行这个过程,记录每次实验的成功概率估计,观察这些估计值的分布是否趋近于理论上的期望值(如果试验是公平的,就是成功的概率)。 4. **可视化结果**:可以使用`histogram`或`plot`等函数来绘制成功概率估计的分布图,以显示随着试验次数增加,估计值趋于稳定的趋势。 在Matlab中没有直接的内置函数来验证伯努利大数定理,但你可以自定义或利用统计包中的函数来实现这个过程。如果你需要代码示例,我可以为你提供一个简化的脚本,但请注意,具体的实现可能因Matlab版本的不同而有所差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恭仔さん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值