计算理论 复杂度预备知识

news/2025/3/14 16:51:05/

文章目录

  • 计算理论 复杂度预备知识
    • 符号
    • 递归表达式求解通项公式
    • 主方法
    • 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)


http://www.ppmy.cn/news/29125.html

相关文章

Kafka基本概念

什么是Kafka Kafka是一个消息系统。它可以集中收集生产者的消息&#xff0c;并由消费者按需获取。在Kafka中&#xff0c;也将消息称为日志(log)。 一个系统&#xff0c;若仅有一类或者少量的消息&#xff0c;可直接进行发送和接收。 随着业务量日益复杂&#xff0c;消息的种类…

华为机试题:HJ86 求最大连续bit数(python)

文章目录&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;Python3实现&#xff08;3&#xff09;知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

【链表OJ题(一)】移除链表元素

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;数据结构 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录链表OJ题(一)1. 移除…

代码随想录算法训练营day46 | 动态规划之背包问题 139.单词拆分

day46139.单词拆分1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp[i]139.单词拆分 题目链接 解题思路&#xff1a;单词就是物品&#xff0c;字符串s就是背包&#xff0c;单词能否组成字符串s&#xff0c;就是问物品能不能把背包装满。…

互联网医院系统软件开发|互联网医院管理系统开发的好处

互联网医院一直是现在的热门行业&#xff0c;很多的医院已经开发了互联网医院&#xff0c;并且已经在良好的运行中&#xff0c;而有一些医院和企业正在开发中&#xff0c;或者打算开发互联网医院系统&#xff0c;其实这些企业和医院还是很有远见的&#xff0c;因为他们知道并了…

mysql实现if语句判断功能的六种使用形式

文章目录 前言一、ifnull函数二、nullif函数三、if函数四、if语句(多用于存储过程)五、if-else语句(多用于存储过程)六、if-elseif-else语句(多用于存储过程)总结前言 在Mysql数据库中实现判断功能有很多方式,具体又分为函数和if语句形式,函数的好处是可以作为sql的一…

【C++】构造函数(初始化列表)、explicit、 Static成员、友元、内部类、匿名对象

构造函数&#xff08;初始化列表&#xff09;前提构造函数体赋值初始化列表explicit关键字static成员概念特性&#xff08;重要&#xff09;有元友元函数友元类内部类匿名对象构造函数&#xff08;初始化列表&#xff09; 前提 前面 六个默认成员对象中我们已经学过什么是构造…

探针台简介

探针台&#xff0c;是我们半导体实验室电学性能测试的常用设备&#xff0c;也是各大实验室以及芯片设计、封装测试的熟客。设备具备各项优势&#xff0c;高性能低成本&#xff0c;用途广&#xff0c;操作方便&#xff0c;在不同测试环境下&#xff0c;测试结果稳定&#xff0c;…