P与NP
P = NP ?
著名的千禧年七大难题之一
只要解决了它百万奖金等你来领
基本概念
P 类:可以在多项式时间内解决的问题
(Polynomial 多项式)
NP 类:可以在多项式时间内验证的问题
(nondeterministic polynomial 非确定性多项式)
像 找出一列数中的最大值、对一列数进行排序这样 可以找出一个多项式时间算法( O(n) 或 O(n^a) )的问题,我们都可以将其划分到 P 类
- 我们很容易想到,P 类问题是包含在 NP 类问题内的
毕竟如果对于一个问题,要是已经能在多项式时间内解决它找出它的解了,验证时直接将输入值和解比较一下就行了,这比较的过程肯定是在多项式时间内的
对应地,考虑那些属于 NP 类,但又可能不属于 P 类的问题,
(也就是能在多项式时间内验证,但至今找不出一个多项式时间解法的问题)
它们可以通过 归约 归于一些较为精简的问题,即
NPC ( C 指 Complete )类
归约
一种使一个 NP 问题和另一个 NP 问题等价的思路/方法
用处
给定一个问题 A ,你要怎么判断(证明)它是 NP 类?
归约的过程:
找到另一个已知是 NP 类的问题 B ,使得可以在多项式时间内将 A 转换为 B (或者将 B 转换为 A ,这其实一个意思)
即输入相同时,两个问题的输出也一定相同,我们就可以说这两个问题等价
这样一来 A 就也属于 NP 类
插播一则笑话:
一个数学家去应聘消防员,别人问他:“如果房子起火了,你应该怎么做?”
他给出的步骤完全正确。
又问:“那如果房子没有起火,你会怎么做?”
答:“我会把房子点燃,这样这个问题就归约为了上一个问题。”
由此可知,归约能将无数个千变万化的问题缩减到几个精简的问题来研究
只要解决了这几个具有代表性的问题,就一定能解决与之同类的问题
这样就大大缩小了研究范围,给前路的探索带来了一线曙光!
而这些具有代表性的问题就被称为 NPC 类问题( C 指 Complete )
所以, NPC 在这里指的不是什么非玩家角色,它是 NP 类的子集,可以由一些 NP 问题归约得到
有了证明的工具,现在要找的就是哪些问题比较具有代表性,可以作为 NPC 类
NPC
电路可满足性问题
首先来想象一个简单的逻辑电路,它的基本元件有: 与门、或门、非门
(以下的 a 、b 的值都是 0 或 1)
与门:输入 a 和 b,输出 a & b
或门:输入 a 和 b,输出 a | b
非门:输入 a ,输出 !a
这几个逻辑门好像还有很多别名什么的(比如电路元素、布尔组合元素)
使用这三种逻辑运算就可以应对我们需要面对的任何问题啦
(事实上,非门本身就是由 与门 和 或门 组合而成的,用这两种其实就够了)
可满足性:对于这个电路,存在一组输入使得最终的输出为 1
那么电路可满足性问题就是:给定一个电路,判断这个电路是否是可满足的