基本概念
优化问题: 构造一个解来最大化或最小化某个目标方程。
决策问题: 一个具有两个答案的问题。举例:哈密尔顿回路,一个给定的无向图是否存在哈密尔顿回路?
许多问题都同时包含这两个版本:
货郎担问题
优化问题: 给定加权的无向图,找一条具有最小权重和的哈密尔顿回路
决策问题: 给定一个加权无向图和整数K,问是否存在一条哈密尔顿回路的权重和不大于K
背包问题
假设我们有载重为W的背包和n个物品,物品的重量对应为w1,w2,…,wn, 价值对应为v1,v2,…,vn. 注:这些值均非负。
优化问题:将物品装入背包使得背包中物品价值和最大。
决策问题:对于给定K,是否存在装载方案使得总价值不小K。
P问题
P问题表示那些可以再多项式时间内解决的一类决策问题。
NP问题
非正式的说法:NP是那些当给定某个猜测的解时,可以在多项式问题内验证解的正确性的一类决策问题。
严格表述:可以由非确定新算法(Non-deterministic polynomial algorithms)解决的一类决策问题。
非确定性算法:一个给定决策问题I作为输入的两阶段过程
“猜测”阶段:产生一个可以作为问题I解的任意字串S
“验证”阶段:一个确定性算法将I和S作为输入,并在多项式时间内检查S是否是I的一个解。
举例:图着色问题
第一步:产生任意一个颜色串
第二步:检查将每个vi图颜色ci后是否是问题的一个解。
很容易看出P属于NP,但反过来目前还没有确定结论。
NPC问题
NP-completeness是用来描述NP决策问题中的最难的那部分问题。
严格定义NPC前先来看一个归约的定义:
如果存在一个转换函数t,它可以将D1的所有解转换为D2的对应解,并且满足:
1. 所有D1正确(yes)的解在D2中也都是正确的。反之也成立。
2. t的转换过程是多项式复杂度的。
这样我们称决策问题D1可以被多项式归约到决策问题D2。
NPC的严格定义
一个决策问题D是NPC如果:
1. D属于NP
2. 每个NP中的问题可以多项式规约到D。
第一个NPC问题
Cook’s theorem (1971): discover the first NP-complete problem, CNF-satisfiability problem.
如何说明一个问题是NPC
1. 证明这个问题是NP的
2. 证明某个已知的NPC问题可以多项式规约到此问题。
一些已知的NPC问题
1. Hamiltonian cycle
2. Travelling salesman
3. Knapsack
4. Bin packing
5. Graph coloring
6. Satisfiability(e.g. CNF SAT)