> 文章列表 > 计算理论 复杂度预备知识

计算理论 复杂度预备知识

计算理论 复杂度预备知识

文章目录

  • 计算理论 复杂度预备知识
    • 符号
    • 递归表达式求解通项公式
    • 主方法
    • Akra-Bazzi 定理

计算理论 复杂度预备知识

符号

f(n)=o(g(n))f(n)=o(g(n))f(n)=o(g(n))∃c\\exists cc ,当 nnn 足够大时, f(n)<cg(n)f(n)\\lt cg(n)f(n)<cg(n)∑n→∞f(n)g(n)=0\\sum\\limits_{n\\to\\infty} \\frac{f(n)}{g(n)}=0ng(n)f(n)=0
f(n)=O(g(n))f(n)=O(g(n))f(n)=O(g(n))∃c\\exists cc ,当 nnn 足够大时, f(n)≤cg(n)f(n)\\le cg(n)f(n)cg(n)
f(n)=θ(g(n))f(n)=\\theta(g(n))f(n)=θ(g(n))∃c1,c2\\exists c_{1}, c_{2}c1,c2 ,当 nnn 足够大时, c1g(n)<f(n)<c2g(n)c_{1}g(n)\\lt f(n) \\lt c_{2}g(n)c1g(n)<f(n)<c2g(n)
f(n)=ω(g(n))f(n)=\\omega(g(n))f(n)=ω(g(n))∃c\\exists cc ,当 nnn 足够大时, f(n)>cg(n)f(n)\\gt cg(n)f(n)>cg(n)
f(n)=Ω(g(n))f(n)=\\Omega(g(n))f(n)=Ω(g(n))∃c\\exists cc ,当 nnn 足够大时, f(n)≥cg(n)f(n)\\ge cg(n)f(n)cg(n)

递归表达式求解通项公式

T(n)=4T(n2)+nT(n)=4T\\left( \\frac{n}{2} \\right)+nT(n)=4T(2n)+n :就直接展开,找到规律
T(n)=4T(n2)+n=4(4(T(n22)+n2)+n=4T(n22)+2n+n=4kT(n2k)+n(20+21+⋯+2k−1)\\begin{array}{l} \\quad T(n) \\\\ =4T(\\frac{n}{2})+n \\\\ =4(4(T(\\frac{n}{2^{2}})+\\frac{n}{2})+n \\\\ =4T(\\frac{n}{2^{2}})+2n+n \\\\ =4^{k}T(\\frac{n}{2^{k}})+n(2^0+2^1+\\dots+2^{k-1}) \\end{array} T(n)=4T(2n)+n=4(4(T(22n)+2n)+n=4T(22n)+2n+n=4kT(2kn)+n(20+21++2k1)
假设 nnn 是 2 的幂,则最后 kkk 应该等于 log⁡2(n)\\log_{2}(n)log2(n) ,故:
T(n)=T(1)n2+n∑i=1log⁡2(n)2i−1=T(1)n2+n(n−1)=O(n2)T(n)=T(1)n^{2}+n\\sum\\limits_{i=1}^{\\log_{2}(n)}2^{i-1}=T(1)n^{2}+n(n-1)=O(n^{2}) T(n)=T(1)n2+ni=1log2(n)2i1=T(1)n2+n(n1)=O(n2)
T(n)=2T(n2)+n=nT(1)+nlog⁡2(n)=O(nlog⁡n)T(n)=2T(\\frac{n}{2})+n=nT(1)+n\\log_{2}(n)=O(n\\log{n})T(n)=2T(2n)+n=nT(1)+nlog2(n)=O(nlogn)
T(n)=4T(n2)+n2=n2T(1)+n2log⁡2n=O(n2log⁡n)T(n)=4T(\\frac{n}{2})+n^{2}=n^{2}T(1)+n^{2}\\log_{2}{n}=O(n^{2}\\log{n})T(n)=4T(2n)+n2=n2T(1)+n2log2n=O(n2logn)
T(n)=2T(n2)+n2=nT(1)+2n2=O(n2)T(n)=2T(\\frac{n}{2})+n^2=nT(1)+2n^{2}=O(n^{2})T(n)=2T(2n)+n2=nT(1)+2n2=O(n2)
T(n)=4T(n2)+n2log⁡nT(n)=4T(\\frac{n}{2})+\\frac{n^{2}}{\\log{n}}T(n)=4T(2n)+lognn2
T(n)=4T(n2)+n2log⁡n=n2T(1)+n2log⁡n+n2log⁡n−1+⋯+n2log⁡1=θ(n2log⁡log⁡n)\\begin{array}{l} \\quad T(n) \\\\ =4T(\\frac{n}{2})+\\frac{n^{2}}{\\log{n}} \\\\ =n^{2}T(1)+\\frac{n^{2}}{\\log{n}}+\\frac{n^{2}}{\\log{n-1}}+\\dots+\\frac{n^{2}}{\\log{1}} \\\\ =\\theta(n^{2}\\log{\\log{n}}) \\end{array} T(n)=4T(2n)+lognn2=n2T(1)+lognn2+logn1n2++log1n2=θ(n2loglogn)
因为这个级数可以看成积分:
1x+1x−1+1x−2+⋯=∫1xdx=ln⁡x\\frac{1}{x}+\\frac{1}{x-1}+\\frac{1}{x-2}+\\dots=\\int_{1}^x \\, dx=\\ln{x} x1+x11+x21+=1xdx=lnx

主方法

Th:设 a≥1a\\geq 1a1b≥1b\\geq 1b1f(n)f(n)f(n) 为一定义在非负整数上的函数,T(n)=aT(nb)+f(n)T(n)=aT(\\frac{n}{b})+f(n)T(n)=aT(bn)+f(n) (当 nb\\frac{n}{b}bn 不为整数时代表 ⌈nb⌉\\lceil \\frac{n}{b} \\rceilbn⌊nb⌋\\lfloor \\frac{n}{b} \\rfloorbn ),则:

  1. ∃ε>0\\exists \\varepsilon>0ε>0 ,使得 f(n)=O(nlog⁡ba−ε)f(n)=O(n^{\\log_{b}{a}-\\varepsilon})f(n)=O(nlogbaε) ,则 T(n)=Θ(nlog⁡ba)T(n)=\\Theta(n^{\\log_{b}{a}})T(n)=Θ(nlogba)
  2. ∃k≥0\\exists k\\geq 0k0 ,使得 f(n)=Θ(nlog⁡balgkn)f(n)=\\Theta(n^{\\log_{b}{a}\\,lg^k{n}})f(n)=Θ(nlogbalgkn) ,则 T(n)=Θ(nlog⁡balgk+1n)T(n)=\\Theta(n^{\\log_{b}{a}}\\,lg^{k+1}{n})T(n)=Θ(nlogbalgk+1n)
  3. ∃ε>0\\exists \\varepsilon>0ε>0 ,使得 f(n)=Ω(nlog⁡ba+ε)f(n)=\\Omega(n^{\\log_{b}{a}+\\varepsilon})f(n)=Ω(nlogba+ε) ,且存在 0<c<10<c<10<c<1 以及正整数 N0N_{0}N0 ,使得当 n>N0n>N_{0}n>N0 时,有 af(nb)≤cf(n)af(\\frac{n}{b})\\leq cf(n)af(bn)cf(n) ,则 T(n)=Θ(f(n))T(n)=\\Theta(f(n))T(n)=Θ(f(n))
    证明:首先展开,得到:

T(n)=aT(nb)+f(n)=a(aT(nb2)+f(nb))+f(n)a2T(nb2)+af(nb)+f(n)=…=alog⁡bnT(1)+∑i=0log⁡bn−1aif(nbi)\\begin{array}{l} \\quad T(n) \\\\ =aT(\\frac{n}{b})+f(n) \\\\ =a(aT(\\frac{n}{b^2})+f(\\frac{n}{b}))+f(n) \\\\ a^2T(\\frac{n}{b^{2}})+af(\\frac{n}{b})+f(n) \\\\ =\\dots \\\\ =a^{\\log_{b}{n}}T(1)+\\sum\\limits_{i=0}^{\\log_{b}{n}-1}a^if(\\frac{n}{b^i}) \\end{array} T(n)=aT(bn)+f(n)=a(aT(b2n)+f(bn))+f(n)a2T(b2n)+af(bn)+f(n)==alogbnT(1)+i=0logbn1aif(bin)

其中 alog⁡bn=blog⁡balog⁡bn=nlog⁡baa^{\\log_{b}{n}}=b^{\\log_{b}a\\log_{b}n}=n^{\\log_{b}a}alogbn=blogbalogbn=nlogba ;如果把 f(n)f(n)f(n) 看成多项式的话,只需要比较 f(n)f(n)f(n) 的次数与 log⁡ba\\log_{b}alogba 的相对大小;
① 若 ∃ε>0\\exists \\varepsilon>0ε>0 ,使得 f(n)=O(nlog⁡ba−ε)f(n)=O(n^{\\log_{b}{a}-\\varepsilon})f(n)=O(nlogbaε) ,则 T(n)=Θ(nlog⁡ba)T(n)=\\Theta(n^{\\log_{b}{a}})T(n)=Θ(nlogba)
∑i=0log⁡bn−1aif(nbi)=∑ai(nb)log⁡ba−ε=∑nlog⁡ba−ε−biεai=nlog⁡ba−ε∑biε=nlog⁡ba−ε1−nε1−bε=O(nlog⁡ba)\\begin{array}{l} \\quad\\sum\\limits_{i=0}^{\\log_{b}{n}-1}a^if\\left( \\frac{n}{b^i} \\right) \\\\ =\\sum\\limits a^i\\left( \\frac{n}{b} \\right)^{\\log_{b}a-\\varepsilon} \\\\ =\\sum\\limits \\frac{n^{\\log_{b}a-\\varepsilon}-b^{i\\varepsilon}}{a^i} \\\\ =n^{\\log_{b}a-\\varepsilon}\\sum\\limits b^{i\\varepsilon} \\\\ =n^{\\log_{b}a-\\varepsilon} \\frac{1-n^{\\varepsilon}}{1-b^{\\varepsilon}} \\\\ =O(n^{\\log_{b}a}) \\end{array} i=0logbn1aif(bin)=ai(bn)logbaε=ainlogbaεbiε=nlogbaεbiε=nlogbaε1bε1nε=O(nlogba)
② 若 ∃k≥0\\exists k\\geq 0k0 ,使得 f(n)=Θ(nlog⁡balgkn)f(n)=\\Theta(n^{\\log_{b}{a}\\,lg^k{n}})f(n)=Θ(nlogbalgkn) ,则 T(n)=Θ(nlog⁡balgk+1n)T(n)=\\Theta(n^{\\log_{b}{a}}\\,lg^{k+1}{n})T(n)=Θ(nlogbalgk+1n)
我们就假设 f(n)=nlog⁡balg⁡knf(n)=n^{\\log_{b}a}\\lg^k{n}f(n)=nlogbalgkn ,则:
∑i=0log⁡bn−1aif(nbi)=∑ai(nbi)log⁡balg⁡k(nbi)=∑ainlog⁡baai(lg⁡n−ilg⁡b)k\\begin{array}{l} \\quad\\sum\\limits_{i=0}^{\\log_{b}{n}-1}a^if\\left( \\frac{n}{b^i} \\right) \\\\ =\\sum\\limits a^{i}(\\frac{n}{b^{i}})^{\\log_{b}{a}}\\lg^k{(\\frac{n}{b^i})} \\\\ =\\sum\\limits a^{i}\\frac{n^{\\log_{b}a}}{a^{i}}(\\lg{n}-i\\lg{b})^k \\end{array} i=0logbn1aif(bin)=ai(bin)logbalgk(bin)=aiainlogba(lgnilgb)k
这个 (lg⁡n−ilg⁡b)k(\\lg{n}-i\\lg{b})^k(lgnilgb)k 二项展开的话会发现,次数肯定是 lg⁡kn\\lg^k{n}lgkn 决定的,则:
≈∑nlogbalg⁡kn=log⁡bn⋅nlogbalg⁡kn=nlog⁡balgk+1n\\begin{array}{l} \\approx \\sum\\limits n^{\\\\log_{b}a}\\lg^k{n} \\\\ =\\log_{b}{n} \\cdot n^{\\\\log_{b}a}\\lg^k{n} \\\\ =n^{\\log_{b}{a}}\\,lg^{k+1}{n} \\end{array} nlogbalgkn=logbnnlogbalgkn=nlogbalgk+1n
③ 若 ∃ε>0\\exists \\varepsilon>0ε>0 ,使得 f(n)=Ω(nlog⁡ba+ε)f(n)=\\Omega(n^{\\log_{b}{a}+\\varepsilon})f(n)=Ω(nlogba+ε) ,且存在 0<c<10<c<10<c<1 以及正整数 N0N_{0}N0 ,使得当 n>N0n>N_{0}n>N0 时,有 af(nb≤cf(n))af(\\frac{n}{b}\\leq cf(n))af(bncf(n)) ,则 T(n)=Θ(f(n))T(n)=\\Theta(f(n))T(n)=Θ(f(n))
当满足条件时,有 cf(n)≥af(nb)cf(n)\\geq af(\\frac{n}{b})cf(n)af(bn) ,得到:
f(n)≥acf(nb)≥a2c2f(nb2)≥⋯≥aicif(nbi)f(n)\\geq \\frac{a}{c}f(\\frac{n}{b}) \\geq \\frac{a^{2}}{c^{2}}f(\\frac{n}{b^{2}})\\geq\\dots\\geq\\frac{a^{i}}{c^{i}}f(\\frac{n}{b^{i}}) f(n)caf(bn)c2a2f(b2n)ciaif(bin)
f(n)≥aicif(nbi)f(n)\\geq\\frac{a^{i}}{c^{i}}f(\\frac{n}{b^{i}})f(n)ciaif(bin) ;需要满足所有大于等于的条件,发现只需要最后一个大于等于满足即可,即 nbi>N0⟹i<log⁡bn−log⁡bN0+1\\frac{n}{b^{i}}\\gt N_{0}\\implies i< \\log_{b}n-\\log_{b}{N_{0}}+1bin>N0i<logbnlogbN0+1
∑i=0log⁡bn−1aif(nbi)=∑i=0log⁡bn−log⁡bN0aif(nbi)+∑i=log⁡bn−log⁡bN0+1log⁡bn−1aif(nbi)\\begin{array}{l} \\quad\\sum\\limits_{i=0}^{\\log_{b}{n}-1}a^if\\left( \\frac{n}{b^i} \\right) \\\\ =\\sum\\limits_{i=0}^{\\log_{b}^n-\\log_{b}^{N_{0}}} a^if\\left( \\frac{n}{b^i} \\right)+\\sum\\limits_{i=\\log_{b}^n-\\log_{b}^{N_{0}}+1}^{\\log_{b}n-1}a^if\\left( \\frac{n}{b^i} \\right) \\end{array} i=0logbn1aif(bin)=i=0logbnlogbN0aif(bin)+i=logbnlogbN0+1logbn1aif(bin)
左项是满足 i<log⁡bn−log⁡bN0+1i< \\log_{b}n-\\log_{b}{N_{0}}+1i<logbnlogbN0+1 的条件,有:
≤∑i=0log⁡bn−log⁡bN0cif(n)=O(f(n))\\leq \\sum\\limits_{i=0}^{\\log_{b}^n-\\log_{b}^{N_{0}}}c^if(n)=O(f(n)) i=0logbnlogbN0cif(n)=O(f(n))
右项是 O(1)O(1)O(1) ,展开也看不出来(直接把 f(n)f(n)f(n) 看作 O(nlog⁡ba+ε)O(n^{\\log_{b}a+{\\varepsilon}})O(nlogba+ε)):
=∑ai(nbi)log⁡ba+ε=∑ainlog⁡ba+εai⋅biε=nlog⁡ba+ε∑1biε=1−(1bε)log⁡bN0−11−1bε⋅1bε(log⁡bn−log⁡bN0+1)⋅nlog⁡ba+ε\\begin{array}{l} =\\sum\\limits a^i\\left( \\frac{n}{b^i} \\right)^{\\log_{b}a+\\varepsilon} \\\\ =\\sum\\limits a^i\\frac{n^{\\log_{b}a+\\varepsilon}}{a^i\\cdot b^{i\\varepsilon}} \\\\ =n^{\\log_{b}a+\\varepsilon}\\sum\\limits\\frac{1}{b^{i\\varepsilon}} \\\\ =\\frac{1-(\\frac{1}b^{\\varepsilon})^{\\log_{b}N_{0}-1}}{1-\\frac{1}{b^{\\varepsilon}}}\\cdot \\frac{1}{b^{\\varepsilon(\\log_{b}n-\\log_{b}N_{0}+1)}} \\cdot n^{\\log_{b}a+\\varepsilon} \\end{array} =ai(bin)logba+ε=aiaibiεnlogba+ε=nlogba+εbiε1=1bε11(b1ε)logbN01bε(logbnlogbN0+1)1nlogba+ε
第一项是常数,后边两项乘起来看着像个常数

Akra-Bazzi 定理

Th:设 g(x)g(x)g(x) 为一非负函数,T(x)={Θ(1),1≤x≤X0∑i=1kaiT(xbi)+g(x),n>X0T(x)=\\left\\{\\begin{array}{ll}\\Theta(1) & ,1\\leq x \\leq X_{0} \\\\ \\sum\\limits_{i=1}^k a_{i}T(\\frac{x}{b_{i}})+g(x)& ,n>X_{0} \\end{array}\\right.T(x)=Θ(1)i=1kaiT(bix)+g(x),1xX0,n>X0 (其中 k≥1k\\geq 1k1ai>0a_{i}>0ai>0bi>1b_{i}>1bi>1X0X_{0}X0 满足对任意 1≤i≤k1\\leq i\\leq k1ikX0>biX_{0}>b_{i}X0>biX0>bibi−1X_{0}>\\frac{b_{i}}{b_{i}-1}X0>bi1bi ),若 g(x)g(x)g(x) 满足多项式增长条件,ppp 为方程 ∑i=1kaibip=1\\sum\\limits_{i=1}^k\\frac{a_{i}}{b_{i}^p}=1i=1kbipai=1 的实数解,则:
T(x)=Θ(xp(1+∫1xg(x)xp+1dx))T(x)=\\Theta\\left( x^p\\left( 1+\\int_{1}^x \\frac{g(x)}{x^{p+1}}dx \\right) \\right) T(x)=Θ(xp(1+1xxp+1g(x)dx))
T(n)=2T(n4+3T(n6)+nlg⁡n)T(n)=2T(\\frac{n}{4}+3T(\\frac{n}{6})+n\\lg{n})T(n)=2T(4n+3T(6n)+nlgn)
24p+36p=1\\frac{2}{4^p}+\\frac{3}{6^p}=14p2+6p3=1p=1p=1p=1
T(n)=Θ(n(1+∫1nxlg⁡xx2dx))=Θ(n(1+12lg⁡2n))=Θ(nlg⁡2n)\\begin{array}{l} \\quad T(n) \\\\ =\\Theta(n(1+\\int_{1}^n \\frac{x\\lg{x}}{x^{2}} dx)) \\\\ =\\Theta(n(1+\\frac{1}{2}\\lg^2{n})) \\\\ =\\Theta(n\\lg^2{n}) \\end{array} T(n)=Θ(n(1+1nx2xlgxdx))=Θ(n(1+21lg2n))=Θ(nlg2n)