首页 > 其他分享 >主定理

主定理

时间:2024-01-05 22:44:26浏览次数:27  
标签:right frac log epsilon 定理 复杂度 left

定义

主定理(Master Theorem)通常是指在算法分析领域中的一个定理,特别是用于分析递归算法的时间复杂度。

时间复杂度相关定义

在计算机科学中,算法的时间复杂度(time complexity)是一个函数,它定性描述该算法的运行时间。其原理在于,将计算机的每种基本运算(如加减乘除)所需的时间视为常数,然后考察一个算法调用了多大量级的基本运算。时间复杂度常用大 \(O\) 符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。例如,如果一个算法对于任何大小为 \(n\) 的输入,它至多需要 \(5n^3 + 3n\) 的时间运行完毕,那么它的渐近时间复杂度是 \(O(n^3)\)。

为了计算时间复杂度,我们通常会估计算法的操作单元数量,每个单元执行的时间都是相同的。因此,总运行时间和算法的操作单元数量最多相差一个常量系数。

相同大小的不同输入值仍可能造成算法的执行时间不同,因此我们通常使用算法的最坏情况复杂度(时间复杂度上界),记为 \(T(n)\) ,定义为任何大小的输入 \(n\) 所需的最大执行时间。另一种较少使用的方法是平均情况复杂度,通常有特别指定才会使用(如用于随机算法)。

对 Bachmann–Landau 符号描述如下:

\(f(n)=O(g(n))\) 表示 \(g\) 是 \(f\) 的上界;

\(f(n)=\Omega(g(n))\) 表示 \(g\) 是 \(f\) 的下界;

\(f(n)=\Theta(g(n))\) 表示 \(g\) 是 \(f\) 的上界和下界。

内容

在算法中,假设有递归关系式:

\[ T(n)=aT\left(\frac nb\right)+f(n),\ a\geq 1,b>1 \]

其中,\(n\) 为问题规模,\(a\) 为子问题数量,\(\frac nb\) 为每个子问题的规模(假设每个子问题规模基本一致),\(f(n)\) 为递归以外的计算。

  • 情况1: 若 \(\exists \epsilon >0\) ,有 \(f(n)=O(n^{\log_ba-\epsilon})\) ,则 \(T(n)=\Theta(n^{\log_ba})\)

  • 情况2: 若 $\exists \epsilon \geq0 $,有 \(f(n)=\Theta(n^{\log_ba}\log^\epsilon n)\) ,则 \(T(n)=\Theta(n^{\log_ba}\log^{\epsilon+1}n)\)

  • 情况3: 若 \(\exists \epsilon >0,c<1\) ,有 \(f(n)=\Omega(n^{\log_ba+\epsilon}),af\left(\frac nb\right)\leq cf(n)\) ,则 \(T(n)=\Theta(f(n))\)

证明

设总复杂度为 \(T(n)\),有

\[T(n)=\sum_{i=0}^{\log_bn}a^i f\left(\frac n{b^i}\right) \]

将上述三种情况分别代入得 \(T(n)\) 得

  • 情况1:

\[ \begin{aligned} T(n)&=O(\sum_{i=0}^{\log_bn}a^i\left(\frac n{b^i}\right)^{\log_ba-\epsilon})\\ &=O(n^{\log_ba-\epsilon}\sum_{i=0}^{\log_bn}\left(\frac a{b^{\log_ba=\epsilon}}\right)^i)\\ &=O(n^{\log_ba-\epsilon}\sum_{i=0}^{\log_bn}b^{\epsilon j})\\ &=O(n^{\log_ba-\epsilon}\left(\frac{n^\epsilon-1}{b^\epsilon-1}\right))\\ &=O(n^{\log_ba}) \end{aligned} \]

  • 情况2:

\[\begin{aligned} T(n) & =\Theta\left(\sum_{i=0}^{\log_b n} a^i\left(\frac{n}{b^i}\right)^{\log _b a} \log ^k\left(\frac{n}{b^i}\right)\right) \\ & =\Theta\left(\sum_{i=0}^{\log_b n} a^i\left(\frac{n^{\log _b a}}{b^{i^{\log _b a}}}\right)\left(\log n-\log b^i\right)^k\right) \\ & =\Theta\left(n^{\log _b a} \sum_{i=0}^{\log_b n}\left(\frac{a}{b^{\log _b a}}\right)^i\left(\log ^k n-\log ^k b^i\right)\right) \\ & =\Theta\left(n^{\log _b a} \sum_{i=0}^{\log_b n} \log ^k n-\log ^k b^i\right) \\ & =\Theta\left(n^{\log _b a}\left(\log _b n \cdot \log ^k n-\sum_{i=0}^{\log_b n} \log ^k b^i\right)\right) \\ & =\Theta\left(\log _b n \cdot \log ^k n \cdot n^{\log _b a}-n^{\log _b a} \sum_{i=0}^{\log_b n} \log ^k b^i\right)\\ & =\Theta\left(n^{\log _b a}\log ^{k+1} n\right) \end{aligned}\\ \]

  • 情况3:

\[\begin{aligned} &af(\frac nb)\leq cf(n)\\ &\Rightarrow a^if(\frac nb)\leq c^if(n)\\ &\Rightarrow T(n)\leq \sum_{i=0}^{\log_b n}c^if(n)\\ &\Rightarrow T(n)\leq f(n)\sum_{i=0}^\infty c^i\\ &\Rightarrow T(n)\leq \left(\frac 1{1-c}\right)f(n)\\ &\Rightarrow T(n)=O(f(n)) \end{aligned} \]

又由于 \(f(n)=\Omega(n^{\log_ba+\epsilon})\),\(T(n)=\Omega(f(n))\),因此

\[T(n)=\Theta(f(n)) \]

综上,定理得证。

应用

一般的递归算法都可以用主定理分析时间复杂度。如大多数分治算法等。下面给出一个具体的问题作为实例。

最小圆覆盖问题 :给定平面上的 \(n\) 个点,求出一个最小的一圆包围所有的点。

对于一个答案,一定有至少两个点在圆上。若不然,则圆可以继续缩小。因此我们只需要找到两个点(作为直径)或三个点即可确定一个最小圆覆盖。

我们用到随机增量法,即将给出的点以随机的顺序进行遍历。\(\{p_i\}\) 为加入的点集。设前 \(i-1\) 个点确定的最小覆盖圆为 \(C\),此时加入 \(p_i\):

  1. 若 \(p_i\) 在 \(C\) 内,则最小覆盖圆不变。

  2. 若 \(p_i\) 在 \(C\) 外,则其一定在新确定的最小覆盖圆上。此时遍历前 \(i-1\) 个点。设当前遍历到 \(p_j\),则将 \(p_i,p_j\) 确定的圆设为当前最小覆盖圆,并遍历前 \(j-1\) 个点,若有点 \(p_k\) 在圆外,则将 \(p_i,p_j,p_k\) 确定的圆设为当前最小覆盖圆。

可以证明,这样一定能获得一个最小圆覆盖。

设三个循环的复杂度分别为 \(T_1(n),T_2(n),T_3(n)\)。现在考虑第一层循环,即加入一个点的循环。由于最多只有三个点在最小覆盖圆上,且我们的点是随机加入的,理论上每个点其之前点确定的最小覆盖圆上的概率是相同的,因此点 \(p_i\) 在加入时在当前圆外并调用下层循环的概率是 \(\frac 3i\)。第二层调用类似。因此计算时间复杂度为

\[ \begin{aligned} &T_1(n)=\sum_{i=1}^n\frac 3iT_2(i)+O(n)\\ &T_2(n)=\sum_{i=1}^n\frac 3iT_3(i)+O(n)\\ &T_3(n)=O(n) \end{aligned} \]

其中两点及三点确定一个圆可由公式推出,计算量固定可视为常数。

这里每一层对上一层实际上是有 \(n\) 个规模为 \(1\) 的子问题。由主定理得,最终算法的时间复杂度为 \(T_1(n)=O(n)\)。


PS:tex 写多了感觉不会写 markdown 了……

标签:right,frac,log,epsilon,定理,复杂度,left
From: https://www.cnblogs.com/BrotherHood/p/17948240

相关文章

  • 裴蜀定理
    定义设\(a,b\)是不全为\(0\)的整数1.对任意整数\(x,y\),满足\(\gcd(a,b)|ax+by\)2.存在整数\(x,y\)使得\(ax+by=\gcd(a,b)\)证明第一条理解一下即可,比较好理解第二条若任何一个等于\(0\),则\(\gcd(a,b)=a\),这时定理显然成立若\(a,b\)均不等于\(0\)由于......
  • 欧拉定理 & 扩展欧拉定理 笔记
    欧拉函数欧拉函数定义为:\(\varphi(n)\)表示\(1\simn\)中所有与\(n\)互质的数的个数。关于欧拉函数有下面的性质和用途:欧拉函数是积性函数。可以通过这个性质求出他的公式。\(f(p)=p-1\)。很显然,比质数\(p\)小的所有数都与他互质。\(f(p^2)=p\times......
  • 扩展中国剩余定理(Excrt)笔记
    扩展中国剩余定理(excrt)本来应该先学中国剩余定理的。但是有了扩展中国剩余定理,朴素的CRT就没用了。扩展中国剩余定理用来求解如下形式的同余方程组:\[\begin{cases}x\equiva_1\({\rmmod}\b_1)\\x\equiva_2\({\rmmod}\b_2)\\...\\x\equiva_n\({\rmmod}\b_......
  • Burnside 引理 与 Pólya 定理 学习笔记
    为了防止明天就把好不容易听完的东西都还给rabbit_lb了,还是记一点吧。1.群论基础1.1群(group)的定义给定集合\(G\)和\(G\)上的二元运算\(\cdot\),满足下列条件称之为群:封闭性:若\(a,b\inG\),则\(a\cdotb\inG\)。结合律:对于任意\(a,b,c\inG\),有\((a\cdotb)\cd......
  • P5091 【模版】扩展欧拉定理
    求\(a^b\bmodm,b\le10^{200000}\)。首先引入三种可以通过取模缩小幂指数的方法。费马小定理:当\(a,p\in\mathbb{Z},\spacep\)为质数且\(p\nmida\)时,\(a^{p-1}\equiv1(\bmod\spacep)\),所以有\(a^b\equiva^{b\bmod(p-1)}(\bmod\spacep)\);欧拉定理:当\(a,m\in\m......
  • 主定理
    参考文章:时间复杂度及主定理详解,托比欧:主定理MasterTheorem。简介在算法分析中,主定理(英语:mastertheorem)提供了用渐近符号表示许多由分治法得到的递推关系式的方法。在初赛题目中,主定理可以用来计算形如\(T(n)=a\timesT(n/b)+O(n^{d})\)的时间复杂度,其中\(T(n)\)是我......
  • Newton-Leibniz公式、可积的充分必要条件、积分中值定理、微积分基本定理
    ......
  • 实数完备性基本定理
    ......
  • 贡献法+经典背包+费马小定理
    SDUT校赛题目Description给定正整数\(n\),计算\(n\)个元素的集合\(\{1,2,\cdots,n\}\),所有非空子集和的乘积取模\(998\,244\,353\)后的结果。Input一个正整数\(n\)\((1\len\le200)\),代表集合大小。例如\(3\)个元素的集合有\(7\)个非空子集,分别为\(\{1\},\{......
  • 鞅与停时定理 例题记录
    鞅与停时定理,一个很厉害的东西,感觉像是一种势能分析。关于它具体是什么,笔者的数学水平还不足以讲述,所以在这里推广一下:概率论科技:鞅与停时定理-littleZ_meow的小窝。下面的写法可能很不专业,请自行避雷。给出一种很OI的解释:你需要设计一个函数\(f(x)\),有次能够得到每一个......