0
点赞
收藏
分享

微信扫一扫

算法设计与分析-笔记-第1章-算法概述

其生 2022-03-12 阅读 51

第1章 算法概述

(一)算法与程序

1.算法

算法是解决问题的一种方法或过程

算法是由若干条指令组成的有穷序列

算法满足:

​ ①输入:有零个或多个输入

​ ②输出:至少有一个输出

​ ③确定性:每条指令是清晰无歧义的

​ ④有限性:每条指令执行次数和执行时间是有限的

2.程序

程序是算法用某种程序设计语言的具体实现

算法必须满足①~④,而程序不一定满足④

操作系统是在无限循环中执行的程序而不是算法,操作系统的各种任务由特定的子程序实现,子程序既是程序也是算法

数据结构+算法=程序

(二)算法复杂性分析

1.算法的复杂性

算法复杂性=算法所需要的计算机资源

nn:问题的规模、输入数据的大小

时间复杂度T(n)T(n):需要的时间资源,对应CPU

空间复杂度S(n)S(n):需要的空间资源,对应内存

2.算法的渐进复杂性

nn\rightarrow\infty,有T(n)t(n)T(n)0\frac{T(n)-t(n)}{T(n)}\rightarrow0,称t(n)t(n)T(n)T(n)的渐进性态,为算法的渐进复杂性

数学上,t(n)t(n)T(n)T(n)的渐进表达式,为T(n)T(n)略去低阶项留下的主项(nn\rightarrow \infty时,变化最快的项)

例如:T(n)=4N2+3N1T(n)=4N^2+3N-1,则t(n)=4n2t(n)=4n^2

3.算法的时间复杂性

II:问题的规模为nn的实例 p(I)p(I):实例II出现的概率

最坏情况下的时间复杂性

Tmax(n)=max{T(I)size(I)=n}T_{max}(n)=max\{T(I)|size(I)=n\}

最好情况下的时间复杂性

Tmin(n)=min{T(I)size(I)=n}T_{min}(n)=min\{T(I)|size(I)=n\}

平均情况下的时间复杂性

Tavg(n)=size(I)=np(ITIT_{avg}(n)=\sum_{size(I)=n}p(I)T(I)

4.渐近分析的记号

(1)渐近上界记号O\Omicron

$\Omicron(g(n))={f(n)|存在正常数c和n_0使得对所有n\geq{n}_0有:0\leq{f(n)}\leq{cg(n)}} $

如:3N+10=O(N)3N+10=\Omicron(N)

如:4N2+3N1=O(N2)4N^2+3N-1=\Omicron(N^2)

(2)渐近下界记号Ω\Omega

$\Omega(g(n))={f(n)|存在正常数c和n_0使得对所有n\geq{n}_0有:0\leq{cg(n))}\leq{f(n)}} $

如:3N+10=Ω(1)3N+10=\Omega(1)

如:4N2+3N1=Ω(N2)4N^2+3N-1=\Omega(N^2)

(3)非紧上界记号ο\omicron

$\omicron(g(n))={f(n)|对于任何正常数c,存在正数n_0使得对所有n\geq{n}_0有:0\leq{f(n)}\leq{cg(n)}} $

等价于当nn\rightarrow\inftyf(n)g(n)0\frac{f(n)}{g(n)}\rightarrow0

如:4N2+3N1=ο(N3)4N^2+3N-1=\omicron(N^3)

(4)非紧下界记号ω\omega

$\omega(g(n))={f(n)|对于任何正常数c,存在正数n_0使得对所有n\geq{n}_0有:0\leq{cg(n))}\leq{f(n)}} $

等价于当nn\rightarrow\inftyf(n)g(n)\frac{f(n)}{g(n)}\rightarrow\infty

如:4N2+3N1=ω(N)4N^2+3N-1=\omega(N)

(5)紧渐近界记号Θ\Theta

$\Theta(g(n))={f(n)|存在正常数c_1、c_2和n_0使得对所有n\geq{n}_0有:c_1g(n)\leq{f(n)}\leq{c_2g(n)}} $

Θ(g(n))=O(g(n))Ω(g(n))\Theta(g(n))=\Omicron(g(n))\bigcap\Omega(g(n))

如:4N2+3N1=Θ(N2)4N^2+3N-1=\Theta(N^2)

5.渐近分析记号在等式和不等式中的意义

f(n)=Θ(g(n))f(n)Θ(g(n))f(n)=\Theta(g(n))\Leftrightarrow f(n)\in{\Theta(g(n))}

一般来说,Θ(g(n))\Theta(g(n))表示Θ(g(n))\Theta(g(n))中的某个函数

如:4n2+3n1=4n2+Θ(n)4n^2+3n-1=4n^2+\Theta(n)表示4n2+3n1=4n2+f(n)4n^2+3n-1=4n^2+f(n)f(n)f(n)Θ(n)\Theta(n)中的某个函数

OοΩω\Omicron、\omicron、\Omega、\omega同理

6.渐近分析中函数比较

f(n)=O(g(n))abf(n)=\Omicron(g(n))\approx a\leq b

f(n)=Ω(g(n))abf(n)=\Omega(g(n))\approx a\geq b

f(n)=ο(g(n))a<bf(n)=\omicron(g(n))\approx a< b

f(n)=ω(g(n))a>bf(n)=\omega(g(n))\approx a>b

f(n)=Θ(g(n))a=bf(n)=\Theta(g(n))\approx a= b

7.渐近分析记号的性质

(1)传递性

f(n)=Θ(g(n)),g(n)=Θ(h(n))f(n)=Θ(h(n))f(n)=\Theta(g(n)),g(n)=\Theta(h(n))\Rightarrow f(n)=\Theta(h(n))

f(n)=O(g(n)),g(n)=O(h(n))f(n)=O(h(n))f(n)=\Omicron(g(n)),g(n)=\Omicron(h(n))\Rightarrow f(n)=\Omicron(h(n))

f(n)=Ω(g(n)),g(n)=Ω(h(n))f(n)=Ω(h(n))f(n)=\Omega(g(n)),g(n)=\Omega(h(n))\Rightarrow f(n)=\Omega(h(n))

f(n)=ο(g(n)),g(n)=ο(h(n))f(n)=ο(h(n))f(n)=\omicron(g(n)),g(n)=\omicron(h(n))\Rightarrow f(n)=\omicron(h(n))

f(n)=ω(g(n)),g(n)=ω(h(n))f(n)=ω(h(n))f(n)=\omega(g(n)),g(n)=\omega(h(n))\Rightarrow f(n)=\omega(h(n))

(2)反身性

f(n)=Θ(f(n))f(n)=\Theta(f(n))

f(n)=O(f(n))f(n)=\Omicron(f(n))

f(n)=Ω(f(n))f(n)=\Omega(f(n))

(3)对称性

f(n)=Θ(g(n))g(n)=Θ(f(n))f(n)=\Theta(g(n))\Leftrightarrow g(n)=\Theta(f(n))

(4)互对称性

f(n)=O(g(n))g(n)=Ω(f(n))f(n)=\Omicron(g(n))\Leftrightarrow g(n)=\Omega(f(n))

f(n)=ο(g(n))g(n)=ω(f(n))f(n)=\omicron(g(n))\Leftrightarrow g(n)=\omega(f(n))

(5)算术运算(以O\Omicron为例)

O(f(n))+O(g(n))=O(max{f(n),g(n)})\Omicron(f(n))+\Omicron(g(n))=\Omicron(max\{{f(n),g(n)}\})

O(f(n))+O(g(n))=O(f(n)+g(n))\Omicron(f(n))+\Omicron(g(n))=\Omicron({f(n)+g(n)})

O(f(n))O(g(n))=O(f(n)g(n))\Omicron(f(n))*\Omicron(g(n))=\Omicron({f(n)*g(n)})

O(cf(n)=O(f(n))\Omicron(cf(n)=\Omicron(f(n))

g(n)=O(f(n))O(f(n))+O(g(n))=O(f(n))g(n)=\Omicron(f(n))\Rightarrow \Omicron(f(n))+\Omicron(g(n))=\Omicron(f(n))

8.渐近记号的关系

img

9.渐近关系的快速判断

f(n)=Θ(g(n))limnf(n)g(n)=c(f(n)g(n))f(n)=\Theta(g(n))\Leftrightarrow \lim\limits_{n\rightarrow\infty}\frac{f(n)}{g(n)}=c(f(n)与g(n)同阶)

f(n)=ο(g(n))limnf(n)g(n)=0(f(n)g(n))f(n)=\omicron(g(n))\Leftrightarrow \lim\limits_{n\rightarrow\infty}\frac{f(n)}{g(n)}=0(f(n)比g(n)低阶)

f(n)=ω(g(n))limnf(n)g(n)=(f(n)g(n))f(n)=\omega(g(n))\Leftrightarrow \lim\limits_{n\rightarrow\infty}\frac{f(n)}{g(n)}=\infty(f(n)比g(n)高阶)

f(n)=O(g(n))O(g(n))Θ(g(n))ο(g(n))f(n)=\Omicron(g(n))\Leftrightarrow \Omicron(g(n))为\Theta(g(n))和\omicron(g(n))中阶数更低的那个

f(n)=Ω(g(n))O(g(n))Θ(g(n))ω(g(n))f(n)=\Omega(g(n))\Leftrightarrow \Omicron(g(n))为\Theta(g(n))和\omega(g(n))中阶数更高的那个

求渐近表达式的一般步骤:去除低阶项只保留最高阶项,再去掉最高级项的系数

10.常见的时间复杂度的渐近阶排序

O(n1)<O(n12)<O(1)<O(logn)<O(n23)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)\Omicron(n^{-1})<\Omicron(n^{\frac{1}{2}})<\Omicron(1)<\Omicron(logn)<\Omicron(n^{\frac{2}{3}})<\Omicron(n)<\Omicron(nlogn)<\Omicron(n^2)<\Omicron(n^3)<\Omicron(2^n)<\Omicron(n!)<\Omicron(n^n)

11.算法渐近复杂性分析中常用函数

(1)单调函数

单调递增:mnf(m)f(n)m\leq n\Rightarrow f(m)\leq f(n)

单调递减:mnf(m)f(n)m\leq n\Rightarrow f(m)\geq f(n)

严格单调递增:m<nf(m)<f(n)m<n\Rightarrow f(m)< f(n)

严格单调递减:m<nf(m)>f(n)m<n\Rightarrow f(m)> f(n)

(2)取整函数

x1<xxx<x+1x-1<\lfloor x\rfloor \leq x\leq \lceil x \rceil<x+1

n2+n2=n\lfloor \frac{n}{2}\rfloor+\lceil\frac{n}{2}\rceil=n

对于n0,a,b>0n\geq0,a,b>0,有:

nab=nab\lceil\frac{\lceil \frac{n}{a}\rceil}{b}\rceil=\lceil\frac{n}{ab}\rceil

nab=nab\lfloor\frac{\lfloor \frac{n}{a}\rfloor}{b}\rfloor=\lfloor\frac{n}{ab}\rfloor

aba+(b1)b\lceil \frac{a}{b}\rceil\leq \frac{a+(b-1)}{b}

aba(b1)b\lfloor \frac{a}{b}\rfloor\geq \frac{a-(b-1)}{b}

(3)多项式函数

p(n)=a0+a1n+a2n2+...+adnd,ad>0p(n)=a_0+a_1n+a_2n^2+...+a_dn^d,a_d>0

p(n)=Θ(nd)p(n)=\Theta(n^d)

f(n)=O(nk)f(n)f(n)=\Omicron(n^k)\Leftrightarrow f(n)有界

f(n)=O(1)f(n)cf(n)=\Omicron(1)\Leftrightarrow f(n)\leq c

kdp(n)=O(nk)k\geq d\Rightarrow p(n)=\Omicron(n^k)

kdp(n)=Ω(nk)k\leq d\Rightarrow p(n)=\Omega(n^k)

k>dp(n)=ο(nk)k>d\Rightarrow p(n)=\omicron(n^k)

k<dp(n)=ω(nk)k<d\Rightarrow p(n)=\omega(n^k)

(4)指数函数

(am)n=(an)m=amn(a^m)^n=(a^n)^m=a^{mn}

aman=am+na^ma^n=a^{m+n}

a>1,nb=ο(an)a>1,\quad n^b=\omicron(a^n)

ex=1+x+x22!+x33!+...=i=0xii!e^x=1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+...=\sum\limits_{i=0}^{\infty}\frac{x^i}{i!}

x1,1+xex1+x+Θ(x2)|x|\leq1,\quad 1+x\leq e^x\leq1+x+\Theta(x^2)

limn(1+xn)n=ex\lim\limits_{n\rightarrow\infty}{(1+\frac{x}{n})}^n=e^x

(5)对数函数

logn=log2n,lgn=log10n,lnn=logen\log n= \log_2 n,\quad \lg n=\log_{10}n,\quad \ln n= \log_{e}n

a>0,b>0,c>0:a>0,b>0, c>0:

a=blogbaa = b^{log_b a}

logc(ab)=logca+logcblog_c(ab)=log_ca+log_cb

logc(ab)=logcalogcblog_c(\frac{a}{b})=log_ca-log_cb

logb(an)=nlogbalog_b(a^n)=nlog_ba

logb(a)=logcalogcblog_b(a)=\frac{log_ca}{log_cb}

logb(a)=1logablog_b(a)=\frac{1}{log_ab}

alogbc=clogbaa^{log_bc}=c^{log_ba}

a>0,logbn=ο(na)a>0,\quad log^bn=\omicron(n^a)

x>1,x1+xln(1+x)xx>-1,\quad \frac{x}{1+x}\leq ln(1+x)\leq x

x1,ln(1+x)=xx22+x33x44+...|x|\leq1, \quad ln(1+x)=x-\frac{x^2}{2}+\frac{x^3}{3}-\frac{x^4}{4}+...

(6)阶乘函数

n!=1×2×3...×nn!=1\times2\times3...\times n

n!={1,  n=1n(n1)!,n>1n!=\begin{cases} 1,\;\qquad\qquad n=1\\ n(n-1)!,\quad n>1\\ \end{cases}

n!=ο(nn)n!=\omicron(n^n)

n!=ω(2n)n!=\omega(2^n)

(三)算法分析的基本法则

1.计算时间选择

(1)for/while循环

循环体内计算时间*循环次数

(2)嵌套循环

循环体内计算时间*所有循环次数

(3)顺序语句

各语句计算时间相加

(4)if-else语句

if语句计算时间和else语句计算时间的较大者

2.最优算法

问题的计算时间下界为Ω(f(n))\Omega(f(n)),则计算时间复杂性为O(f(n))\Omicron(f(n))的算法是最优算法

如:排序问题的计算时间下界为Ω(nlogn)\Omega(nlogn),计算时间复杂性为O(nlogn)\Omicron(nlogn)(堆排序)的排序算法是最优算法

(四)NP完全性理论

1.P类问题与NP类问题

说明
易处理的问题 需要多项式时间算法求解的问题
难处理的问题 需要超多项式时间才能求解的问题
不可解问题 任何计算机无论耗费多长时间都不能解决的问题
如:图灵停机问题——不能给出一个判断任意一个图灵机是否停机的一般方法
同理还有:
理发师悖论:村里有个理发师,该理发师有条原则:村里的人如果不自己理发,理发师就给这个人理发,否则不给这个 人理发,那么理 发师能否给自己理发是不可解的。
停机测试悖论:计算机有个测试程序,该测试程序有条原则:计算机里的程序如果不递归调用自己,测试程序就调用它,否则不调它, 那么测试程序能否自己递归调用自己是不可解的。
非确定性问题 问题的答案无法直接计算得到,只能通过判断猜算的正确与否得到
多项式非确定性问题:判断猜算正确与否的算法可以在多项式时间内算出来
完全多项式非确定性问题:该问题的所有可能答案能在多项式时间内进行正确与否的验算
如:旅行售货员问题(TSP)
G=(V,E)是一个带权图,图中各边的权为费用,周游路线是包含V中每个顶点的一条回路
最优化形式的TSP问题——在G中找出费用最小的周游线路——较难
判定形式的TSP问题——判断G中是否存在总费用不超过d的周游线路——较易
非确定性算法:将问题分解为猜想和验证两个阶段
猜测:给出问题的一个猜想——非确定性
验证:验证猜测阶段给出解的正确性——确定性

P、NP、NPC、NP-Hard问题

说明
P 可以在多项式时间解决的问题
(确定性计算模型下的易解问题类)
NP 目前无多项式时间解决的算法,但可以在多项式时间内验证候选答案是否正确
(NP类问题是非确定性计算模型下的易验证问题类)
NPC ①本身是NP问题
②任何一个NP问题都可以在多项式时间规约到该问题
NP-Hard ①本身不能确定是NP问题
②任何一个NP问题都可以在多项式时间规约到该问题

在这里插入图片描述

PNPP\subseteq NP

2.NP完全问题(NPC)

如果一个NP完全问题(NPC)能在多项式时间内得到解决,那么NP中的每一个问题都可以在多项式时间内求解

目前还没有一个NP完全问题(NPC)有多项式时间算法

3.一些典型的NP完全问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IiQ7bR68-1647060345749)(C:\Users\86136\Desktop\图片_笔记用\NP完全问题.PNG)]

4.NP完全问题的近似算法

(1)只对问题的特殊实例求解

(2)只求近似解

(3)用动态规划法或分支限界法求解

(4)用概率算法求解

(5)用启发式方法求解

[外链图片转存中…(img-jKHdtrUX-1647060345747)]

PNPP\subseteq NP

2.NP完全问题(NPC)

如果一个NP完全问题(NPC)能在多项式时间内得到解决,那么NP中的每一个问题都可以在多项式时间内求解

目前还没有一个NP完全问题(NPC)有多项式时间算法

3.一些典型的NP完全问题

在这里插入图片描述

4.NP完全问题的近似算法

(1)只对问题的特殊实例求解

(2)只求近似解

(3)用动态规划法或分支限界法求解

(4)用概率算法求解

(5)用启发式方法求解

举报

相关推荐

0 条评论