外观
09 P/NP 理论与 NP 完全性证明
本章对应考试中的:简答 Q5(0/1 背包的多项式等价判定问题,高频)、Q6(某路径问题是否属 NP)、Q7(P、NP、NPC、NP-hard、归约、转化的定义)、NP 完全性证明 N1(TSP)/N2(SAT)(
试卷6,25 分)、判断题 32~42(P/NP 高频陷阱区)、选择题第 9 题。这一章概念多、最绕,但判断题和定义题占分大、且高度重复,把定义和几个陷阱背熟就能拿稳分。
核心考点
- 判定问题 是什么(判断题 41、42 直接考)。
- P、NP、NP 完全(NPC)、NP 难(NP-hard) 的定义与关系(Q7、判断题 32~40)。
- 归约与转化 的区别(Q7、判断题 40)。
- NP 完全性证明的两步法(N1、N2)。
- 多项式等价(Q5 背包)。
从零开始的前置知识
判定问题 vs 优化问题 vs 搜索问题
- 判定问题(decision problem):答案只有"是(yes)/否(no)"的问题。例:"给定图
和整数 , 中是否存在大小至少为 的团?" - 优化问题(optimization problem):求最优值。例:"
中最大团的大小是多少?" - 搜索/构造问题(search problem):求一个具体的解。例:"找出
中一个最大的团。"
整套 P/NP 理论是建立在判定问题上的。
判断题 41:"下列是判定问题:给定合取范式
,对 中所有变量求一组真值赋值使其为真"——✗ 错。"求一组赋值"是搜索/构造问题;判定问题只问"是否存在这样的赋值(yes/no)"。 判断题 42:"给定图 ,求 中最大团的尺寸 ,是判定问题"——✗ 错。"求尺寸"是优化问题;判定版本应是"是否存在尺寸 的团"。
P 类、NP 类
- P 类:存在多项式时间算法就能求解的判定问题的集合。直观说就是"容易解的问题"。
- NP 类:对每个"是(yes)"的实例,都存在一个多项式长度的"证书"(即一个候选解),并且能在多项式时间内验证这个证书确实证明它是 yes 实例。直观说就是"容易验证的问题"。
判断题 39:"P 类是易解的问题,NP 是易被验证的问题"——✓ 对,这是标准直观刻画。
证书(certificate):一个"声称这是 yes 实例"的证据。例如团问题,给你一组顶点(证书),你只要检查它们两两相连且数量够
P 与 NP 的关系
- 已知
(能"求解"的当然能"验证",所以 P 一定在 NP 里)。 还是 (P 是 NP 的真子集)至今没有证明,这是著名的悬而未决问题。
判断题 37:"如果一个问题是 NP 问题,则它一定不是 P 问题"——✗ 错。因为
,P 问题本身就是 NP 问题。 判断题 38:"如果一个问题不是 NP 问题,那么它有可能是 P 问题"——✗ 错。因为 ,不是 NP 的就一定不是 P(否则它会因属于 P 而属于 NP,矛盾)。 判断题 35/36(关于能否写成 ):由于 (真包含)尚未被证明,"断言真包含"缺乏依据。题库对这两条措辞不同的题,按其答案键:第 35 条标"⚠️ 见解析",第 36 条"P 与 NP 不可以用 表示"标 ✓ 对。考试以题库答案为准,理解要点是" 已知、 未证"。
NP 完全(NPC)与 NP 难(NP-hard)
- NP 完全(NP-complete, NPC):一个判定问题
满足两条——① ;② NP 中所有其它问题都能多项式转化到 。直观说,它是"NP 类里最难的一档"。 - NP 难(NP-hard):NP 中所有问题都能多项式归约到它(不要求它本身属于 NP),所以范围比 NPC 更广,可能比 NPC 还难。
关键关系:NPC = NP-hard
判断题 32:"所有问题中最难的一组是 NP 完备问题"——✗ 错。NP 完全是 NP 类内最难,不是"所有问题"中最难;NP-hard 可以更难。 判断题 33:"NP 完全问题比其它所有 NP 问题都难"——✗ 错。NP 完全问题之间是等难的(互相能多项式转化),它只是"至少和其它 NP 问题一样难",并非严格更难。 判断题 34:"NP 完备问题是所有 NP 问题中最难的,目前还没找到多项式算法"——✗ 错。症结在"比其它所有都难"——NP 完全问题彼此等难;后半句"未找到多项式算法"本身是对的。
归约与转化(Q7、判断题 40)
- 归约(reduce):若能用"求解
的算法"作为子程序来求解 ,则称 可归约为 (记 )。直观:" 至少和 一样难"。 - 转化(transform,多项式变换):若对
的每个实例 ,都能在多项式时间内构造出 的一个实例 ,使得" 是 yes 实例 当且仅当 是 yes 实例",则称 可多项式转化为 (记 )。转化是归约的一种更严格的特例。
方向要记牢:
判断题 40:"若
多项式转化为 ,则 至少与 一样难"——✗ 错。 表示的是 至少和 一样难,方向反了。
常见的 NP(完全)问题(记几个备用)
电路可满足性(Circuit-SAT)、布尔公式可满足性(SAT)、3-CNF-SAT、团问题(Clique)、顶点覆盖(Vertex Cover)、哈密尔顿回路(Hamiltonian Cycle)、旅行商问题(TSP)、子集和问题(Subset Sum)。
答题模板
模板 F:证明问题 X 是 NP 完全的(两步)
① 证 X ∈ NP:给出一个"证书"(候选解),说明能在多项式时间内验证它是否使 X 成为 yes 实例。
② 证 X 是 NP 难:取一个【已知的 NP 完全问题 Y】,构造多项式时间转化
把 Y 的任意实例变成 X 的一个实例,使得 "Y 是 yes 实例 ⟺ X 是 yes 实例"。
结合①②,X 是 NP 完全的。∎
模板:证明某问题属于 NP
给出证书 + 说明验证过程在多项式时间内完成即可。逐题精解
Q5 0/1 背包的多项式等价判定问题(高频)
原题:写出 0/1 背包问题的一个多项式等价的判定问题,并说明为什么它们多项式等价。
前置:0/1 背包优化问题——
判定问题:给定
多项式等价证明(双向):
- 优化 → 判定:若有解优化问题的算法,先求出最优总价值
,则判定问题的答案就是" 是否成立",一次调用即可。 - 判定 → 优化:若有解判定问题的算法,在价值范围
上对 做二分搜索,每次问"是否能达到价值 ", 次调用就能逼出最优值 。
两个方向都只需多项式次调用和多项式额外工作,所以二者多项式等价。
Q6 某路径问题是否属于 NP(2011影印 等,2 分)
原题:给定图
中两点 、整数 和 、每条边的长度 和遍历时间 ,问 中是否存在一条从 到 的路径,使其长度大于 且遍历时间小于 ?该问题是否属于 NP?为什么?
答案:属于 NP。 对任意一条候选路径(证书),只需沿路径累加各边长度与时间(
Q7 P/NP/NPC/NP-hard、归约、转化的定义
见上面"从零开始的前置知识",整理成答题语言即可:
- P:存在多项式时间算法求解的判定问题类。
- NP:每个 yes 实例都有多项式长度证书、可在多项式时间内验证的判定问题类。
- NPC:
,且 NP 中所有问题都可多项式转化到 。 - NP-hard:NP 中所有问题都可多项式归约到
(不要求 ,范围更广)。 - 归约:用求解
的算法作子程序求解 ,则 可归约为 。 - 转化:对
每个实例 都能多项式时间构造 实例 ,使 为 yes 当且仅当 为 yes。
选择题第 9 题
关于判定问题难易处理的叙述,正确的是(C):可以由多项式时间算法求解的问题是易处理的。(多项式时间可解 = 易处理 = P 类;需要超多项式时间的才是难处理。)
NP 完全性证明题(N1、N2,试卷6,25 分)
N1 证明 TSP 是 NP 完全的(已知哈密尔顿回路 HAM-CYCLE 是 NPC)
原题:已知哈密尔顿回路问题 HAM-CYCLE =
是哈密尔顿图 是 NP 完全的。证明 TSP = 是完全图, , , 有一条耗值至多为 的旅行商回路 是 NP 完全的。
前置:哈密尔顿回路 是经过图中每个顶点恰好一次再回到起点的回路。完全图 是任意两个顶点之间都有边的图。
证明(两步):
① TSP
② HAM-CYCLE
则:
结合 ① ②,TSP 是 NP 完全的。
N2 证明布尔公式可满足性 SAT 是 NP 完全的(已知电路可满足性 CIRCUIT-SAT 是 NPC)
原题:已知电路可满足性问题是 NP 完全的,证明布尔公式的可满足性 SAT 是 NP 完全的。
证明(两步):
① SAT
② CIRCUIT-SAT
结合 ① ②,SAT 是 NP 完全的。
高频陷阱 / 易错点小结
- NP 完全问题彼此等难(判断 33、34),不是"比所有 NP 都难";NP 完全是"NP 类内最难",不是"所有问题里最难"(判断 32)。
已知, / 未解决:所以"NP 就一定不是 P"(判断 37)、"非 NP 可能是 P"(判断 38)都是错的。 - 转化方向:
意味着 至少和 一样难(判断 40 反了所以错)。 - 判定问题只问 yes/no:求赋值(判断 41)、求最大尺寸(判断 42)都不是判定问题。
- NP 完全证明永远两步:先证
(给证书 + 多项式验证),再从一个已知 NPC 问题做多项式转化。 - NPC = NP-hard 且 ∈ NP;NP-hard 不要求属于 NP。
自测清单
- [ ] 说清判定 / 优化 / 搜索问题的区别,并判对判断 41、42。
- [ ] 默写 P、NP、NPC、NP-hard 四个定义。
- [ ] 说清归约与转化的区别,以及
的"难度方向"。 - [ ] 写出 0/1 背包的判定版本,并说明优化与判定双向多项式等价。
- [ ] 完整写出 TSP 的 NP 完全证明两步(含
构造与 )。 - [ ] 说出判断 32、33、34、37、38、40 各自为什么错。