npc介绍

楔子

这学期选了中大的神课CSCI5320,授课老师是蔡雷震教授,香港一位很牛的搞算法的老师。蒟蒻被这门课虐得意识模糊,下周考试,复习之余写点心得。

P问题 NP问题 NPC问题 NP-hard问题 区别

几个问题介绍网络上很多,这里简单回顾一下:

→ \rightarrow P问题:多项式可以得到解

→ \rightarrow NP问题:多项式时间可以验证一个解的正确性

→ \rightarrow NPC问题:又称NP完备。NP问题中最难的一类,也就是说任何NP问题都可以在多项式时间内归约到这一类问题上。

我们要证明一个问题A是NPC问题一般可以分为两步:

1)首先A是NP问题,那么给定一个解,可以在多项式时间内验证该解是否正确。(**NP问题的要求**)

2)其次找到一个NPC问题B,B可以多项式时间内归约到A。也就是说A比B难,可以通过解A,把B解了。

→ \rightarrow NP-hard问题:比NPC更难,在多项式时间内无法验证一个解的正确性。

我们要证明一个问题A是NP-hard问题一般可以分为两步:

1) 对问题A给定限制条件得到一个特例B问题

2)证明问题B是NPC问题。

可以看出NPC是NP问题和NP-hard问题的交集。

举个例子:

Dense Induced Subgraph:给定图 G G G,正整数 k k k l l l,是否存在 k k k个点的生成子图包含最少 l l l条边。
证明:令 l = C k 2 l=C_k^2 l=Ck2,那么该问题变成Clique问题(NPC问题)

常见的NPC问题

→ \rightarrow Clique

给定图 G G G,正整数 k k k,是否存在 k k k个点的Clique。

→ \rightarrow Vertex Cover

给定图 G G G,正整数 k k k,是否存在 k k k个点的覆盖。

→ \rightarrow Dominating Set

给定图 G G G,正整数 k k k,是否存在dominating set的大小最多为 k k k
Dominating Set D D D是点集 V V V的一个子集,并且对于不在 D D D中的点 v v v,至少存在一条边 ( u , v ) ∈ E (u,v)\in E (u,v)E u ∈ D u\in D uD

→ \rightarrow Hamiltonian Cycle

给定图 G G G
G G G是否存在哈密尔顿回路 H H H

→ \rightarrow 3-Satisfiability (3Sat)

给定一个有穷的布尔变量集合 X = { x 1 , x 2 , … , x n } X=\lbrace x_1,x_2,\ldots,x_n \rbrace X={x1,x2,,xn},变量 x i x_i xi取值为1或者0,另有一组子句 C = { c 1 , c 2 , … , c m } C=\lbrace c_1,c_2,\ldots,c_m \rbrace C={c1,c2,,cm} C = c 1 ∧ c 2 ∧ … ∧ c m \mathbb{C}=c_1\wedge c_2 \wedge \ldots \wedge c_m C=c1c2cm c i = x j ∨ x k ∨ x l c_i = x_j \vee x_k \vee x_l ci=xjxkxl。求是否存在一组取值使得 C \mathbf{C} C为真,即任意 c i c_i ci为真。

→ \rightarrow Independent Set

给定图 G G G,是否存在Independent Set最少包含 k k k个点。

→ \rightarrow Hamiltonian Path

给定图 G G G,是否存在哈密尔顿路径。

原文请访问蒋家鑫的个人主页

你可能感兴趣的:(算法)