算法设计与分析-笔记-第1章-算法概述(理清5种渐近分析的记号,学会算法复杂性分析,区分P、NP、NPC、NP-Hard问题)

第1章 算法概述

(一)算法与程序

1.算法

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

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

算法满足:

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

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

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

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

2.程序

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

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

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

数据结构+算法=程序

(二)算法复杂性分析

1.算法的复杂性

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

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

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

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

2.算法的渐进复杂性

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

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

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

3.算法的时间复杂性

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

最坏情况下的时间复杂性

T m a x ( n ) = m a x { T ( I ) ∣ s i z e ( I ) = n } T_{max}(n)=max\{T(I)|size(I)=n\} Tmax(n)=max{T(I)size(I)=n}

最好情况下的时间复杂性

T m i n ( n ) = m i n { T ( I ) ∣ s i z e ( I ) = n } T_{min}(n)=min\{T(I)|size(I)=n\} Tmin(n)=min{T(I)size(I)=n}

平均情况下的时间复杂性

T a v g ( n ) = ∑ s i z e ( I ) = n p ( I ) T ( I ) T_{avg}(n)=\sum_{size(I)=n}p(I)T(I) Tavg(n)=size(I)=np(ITI

4.渐近分析的记号
(1)渐近上界记号 O \Omicron O

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

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

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

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

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

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

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

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

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

等价于当 n → ∞ n\rightarrow\infty n f ( n ) g ( n ) → 0 \frac{f(n)}{g(n)}\rightarrow0 g(n)f(n)0

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

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

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

等价于当 n → ∞ n\rightarrow\infty n f ( n ) g ( n ) → ∞ \frac{f(n)}{g(n)}\rightarrow\infty g(n)f(n)

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

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

Θ ( g ( n ) ) = { f ( n ) ∣ 存 在 正 常 数 c 1 、 c 2 和 n 0 使 得 对 所 有 n ≥ n 0 有 : c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) } \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))={f(n)c1c2n0使nn0c1g(n)f(n)c2g(n)}

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

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

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

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

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

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

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

6.渐近分析中函数比较

f ( n ) = O ( g ( n ) ) ≈ a ≤ b f(n)=\Omicron(g(n))\approx a\leq b f(n)=O(g(n))ab

f ( n ) = Ω ( g ( n ) ) ≈ a ≥ b f(n)=\Omega(g(n))\approx a\geq b f(n)=Ω(g(n))ab

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

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

f ( n ) = Θ ( g ( n ) ) ≈ a = b f(n)=\Theta(g(n))\approx a= b f(n)=Θ(g(n))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)=Θ(g(n)),g(n)=Θ(h(n))f(n)=Θ(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)=O(g(n)),g(n)=O(h(n))f(n)=O(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 ) = ο ( 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 ) = ω ( 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))

(2)反身性

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

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

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

(3)对称性

f ( n ) = Θ ( g ( n ) ) ⇔ g ( n ) = Θ ( f ( n ) ) f(n)=\Theta(g(n))\Leftrightarrow g(n)=\Theta(f(n)) f(n)=Θ(g(n))g(n)=Θ(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)=O(g(n))g(n)=Ω(f(n))

f ( n ) = ο ( 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))

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

O ( f ( n ) ) + O ( g ( n ) ) = O ( m a x { f ( n ) , g ( n ) } ) \Omicron(f(n))+\Omicron(g(n))=\Omicron(max\{{f(n),g(n)}\}) O(f(n))+O(g(n))=O(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))

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))

O ( c f ( n ) = O ( f ( n ) ) \Omicron(cf(n)=\Omicron(f(n)) O(cf(n)=O(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)) g(n)=O(f(n))O(f(n))+O(g(n))=O(f(n))

8.渐近记号的关系

img

9.渐近关系的快速判断

f ( n ) = Θ ( g ( n ) ) ⇔ lim ⁡ n → ∞ f ( 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))nlimg(n)f(n)=c(f(n)g(n))

f ( n ) = ο ( g ( n ) ) ⇔ lim ⁡ n → ∞ f ( 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))nlimg(n)f(n)=0(f(n)g(n))

f ( n ) = ω ( g ( n ) ) ⇔ lim ⁡ n → ∞ f ( 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)=ω(g(n))nlimg(n)f(n)=(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)=O(g(n))O(g(n))Θ(g(n))ο(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))中阶数更高的那个 f(n)=Ω(g(n))O(g(n))Θ(g(n))ω(g(n))

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

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

O ( n − 1 ) < O ( 1 ) < O ( l o g n ) < O ( n ) < O ( n ) < O ( n l o g n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) < O ( n n ) \Omicron(n^{-1})<\Omicron(1)<\Omicron(logn)<\Omicron(\sqrt{n})<\Omicron(n)<\Omicron(nlogn)<\Omicron(n^2)<\Omicron(n^3)<\Omicron(2^n)<\Omicron(n!)<\Omicron(n^n) O(n1)<O(1)<O(logn)<O(n )<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)

11.算法渐近复杂性分析中常用函数
(1)单调函数

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

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

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

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

(2)取整函数

x − 1 < ⌊ x ⌋ ≤ x ≤ ⌈ x ⌉ < x + 1 x-1<\lfloor x\rfloor \leq x\leq \lceil x \rceil<x+1 x1<xxx<x+1

⌊ n 2 ⌋ + ⌈ n 2 ⌉ = n \lfloor \frac{n}{2}\rfloor+\lceil\frac{n}{2}\rceil=n 2n+2n=n

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

⌈ ⌈ n a ⌉ b ⌉ = ⌈ n a b ⌉ \lceil\frac{\lceil \frac{n}{a}\rceil}{b}\rceil=\lceil\frac{n}{ab}\rceil ban=abn

⌊ ⌊ n a ⌋ b ⌋ = ⌊ n a b ⌋ \lfloor\frac{\lfloor \frac{n}{a}\rfloor}{b}\rfloor=\lfloor\frac{n}{ab}\rfloor ban=abn

⌈ a b ⌉ ≤ a + ( b − 1 ) b \lceil \frac{a}{b}\rceil\leq \frac{a+(b-1)}{b} baba+(b1)

⌊ a b ⌋ ≥ a − ( b − 1 ) b \lfloor \frac{a}{b}\rfloor\geq \frac{a-(b-1)}{b} baba(b1)

(3)多项式函数

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

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

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

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

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

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

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

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

(4)指数函数

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

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

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

e x = 1 + x + x 2 2 ! + x 3 3 ! + . . . = ∑ i = 0 ∞ x i i ! e^x=1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+...=\sum\limits_{i=0}^{\infty}\frac{x^i}{i!} ex=1+x+2!x2+3!x3+...=i=0i!xi

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

lim ⁡ n → ∞ ( 1 + x n ) n = e x \lim\limits_{n\rightarrow\infty}{(1+\frac{x}{n})}^n=e^x nlim(1+nx)n=ex

(5)对数函数

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

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

a = b l o g b a a = b^{log_b a} a=blogba

l o g c ( a b ) = l o g c a + l o g c b log_c(ab)=log_ca+log_cb logc(ab)=logca+logcb

l o g c ( a b ) = l o g c a − l o g c b log_c(\frac{a}{b})=log_ca-log_cb logc(ba)=logcalogcb

l o g b ( a n ) = n l o g b a log_b(a^n)=nlog_ba logb(an)=nlogba

l o g b ( a ) = l o g c a l o g c b log_b(a)=\frac{log_ca}{log_cb} logb(a)=logcblogca

l o g b ( a ) = 1 l o g a b log_b(a)=\frac{1}{log_ab} logb(a)=logab1

a l o g b c = c l o g b a a^{log_bc}=c^{log_ba} alogbc=clogba

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

x > − 1 , x 1 + x ≤ l n ( 1 + x ) ≤ x x>-1,\quad \frac{x}{1+x}\leq ln(1+x)\leq x x>1,1+xxln(1+x)x

∣ x ∣ ≤ 1 , l n ( 1 + x ) = x − x 2 2 + x 3 3 − x 4 4 + . . . |x|\leq1, \quad ln(1+x)=x-\frac{x^2}{2}+\frac{x^3}{3}-\frac{x^4}{4}+... x1,ln(1+x)=x2x2+3x34x4+...

(6)阶乘函数

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

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

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

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

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

1.计算时间选择
(1)for/while循环

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

(2)嵌套循环

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

(3)顺序语句

各语句计算时间相加

(4)if-else语句

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

2.最优算法

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

如:排序问题的计算时间下界为 Ω ( n l o g n ) \Omega(nlogn) Ω(nlogn),计算时间复杂性为 O ( n l o g n ) \Omicron(nlogn) O(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问题都可以在多项式时间规约到该问题

在这里插入图片描述

P ⊆ N P P\subseteq NP PNP
N P C ⊆ N P − H a r d NPC\subseteq NP-Hard NPCNPHard

2.NP完全问题(NPC)

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

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

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

在这里插入图片描述

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

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

(2)只求近似解

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

(4)用概率算法求解

(5)用启发式方法求解

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值