如何证明NP-Hard Problems
【1】
经典问题:电路可满足性问题
The circuit satisfiability problem asks, given a circuit, whether there is an input that makes the circuit output TRUE, or conversely, whether the circuit always outputs FALSE.
【2】
- P: can be solved in polynomial time
- NP: If the answer is YES + this fact that can be checked in polynomial time
- co-NP: If the answer is NO + this fact that can be checked in polynomial time
【3】
- NP-hard: no one in their right mind should believe a np-hard problem can be solved in polynomial time.—所有的NP问题都能约化到他,但他本身不一定是个NP问题
Π is NP-hard ⇐⇒ If Π can be solved in polynomial time, then P=NP
- NP-complete:( the hardest problems in NP) it is both NP-hard and an element of NP. —所有的NP问题都能约化到他,而且他本身也一定是个NP问题
- 所以:NP-Hard问题要比 NPC问题的范围广
P问题就是指该问题能在多项式复杂度内解决。
NP问题就是指该问题能在多项式复杂度内被验证。
复杂度一般用大写字母O表示,多项式复杂度记为O(n(^k))。
NP-hard问题就是比NP问题更困难解决的问题,通常NP问题都可以说是NP-hard问题,但是不是所有的NP-hard问题都是NP问题(有些NP-hard问题无法被验证)
NP-complete(NPC问题)就是既是NP问题也是NP-hard问题。
链接:https://www.jianshu.com/p/9cad6175a1ea
The Cook-Levin Theorem:Circuit satisfiability is NP-complete.
【4】
reduction:如果能找到这样一个变化法则,对任意一个程序A的输入,都能按这个法则变换成程序B的输入,使两程序的输出相同,那么我们说,问题A可归约为问题B。(一个问题归约为另一个问题,时间复杂度增加了,问题的应用范围也增大了)
如何证明一个问题是NP-hard?
To prove that problem A is NP-hard, reduce a known NP-hard problem to A.
boolean formula
形如:
要使整个formula的结果是TRUE,则每个clause的值都为TRUE,那么每个clause里的元素只需要有一个是TRUE,那么最终的结果就是TRUE。
SAT问题
已知电路可满足性问题(CSAT)是NP-hard,找到一个变化法则将CSAT约化成SAT,那么既然CSAT是NP-hard,则可证明SAT是NP-hard。
可以通过上图所示深度优先搜索的方式,在线性时间O(n)内将任何 boolean circuit 转化成 boolean formula,Tus,we have a polynomial-time reduction from CSAT to SAT:
SAT is NP-complete.
【5】 3SAT:3SAT is just SAT restricted to 3CNF formulas
prove that 3SAT is NP-hard :
虽然已经证出SAT是np-hard,但CSAT更容易理解,所以证明3SAT是np-hard依然是找到一个变化法则将CSAT直接约化成3SAT,只是在将 boolean circuit 转化成 boolean formula时,保证每个clause里只有三个元素
四步走可以完成:
- Make sure every AND and OR gate has only two inputs. If any gate has k > 2 inputs, replace it with a binary tree of k−1 two-input gates.
- Write down the circuit as a formula, with one clause per gate. This is just the previous reduction.
- Change every gate clause into a CNF formula.
- Make sure every clause has exactly three literals.
通过以上步骤由boolean circuit 转化成的3CNF formula,最终结果看起来体型非常庞大,但他仍然只是一个常数因子,并且这个约化过程可在多项式时间内完成。
3SAT is NP-complete.
【6】 Maximum Independent
从无向图中的顶点中选出k个并且k个顶点之间互不相邻,最大的k就是最大独立集( MAXINDSET)
证明MAXINDSET是NP-hard: reduction from 3SAT
在多项式时间内,将3CNF formula reduce to 一个无向图,找到使3CNF formula为TRUE的安排,则可找到该无向图的最大独立集,即可证明。
转换规则:
1)formula里出现的每一个字母,图中都有对应的节点
2)在同一个clause里的字母用一条边连接
3)变量(字母)和其逆用一条边连接(如x和x )
证明过程:
一个3CNF formula:
转换成一个无向图:
设3CNF formula有k个clause,则对应的无向图的最大独立集为k
分析:
independent set ⇒ satisfying assignment:最大独立集的顶点之间没有边,所以他们不可能在一个clause里,且不会互逆(互逆的都用边连起来了),将最大独立集中的所有节点值都设为TRUE,则对于原来的3CNF formula来说,每一个clause都是TRUE,则整个formula的值也是TRUE。
satisfying assignment ⇒ independent set: 这个更好理解,由formula为TRUE推到存在这样的一个无向图的最大独立集,将每个clause里选一个字母取真即可(因为按照上面的规则,一个formula一定可以转成一个无向图)
【7】 Clique
从无向图的顶点集中选出k个并且k个顶点之间任意两点之间都相邻(完全图),最大的k就是最大团(MAXCLIQUE)
证明 MAXCLIQUE是NP-hard: reduction from MAXINDSET
为找出最大独立集与最大团的关系,取上文中给出的例子前两个clause举例:
按照规则得出的无向图G如下:
则对应的边补图G’如下:
所以很容易发现,在每个clause里取一个即为图G的最大独立集,同时也是图G’的最大团,中间只需要一个多项式时间内的边补图转化。
【8】Vertex Cover
找到一个结点集合使得图上的每一条边的至少一端是在集合中
在independent set中,任意2个结点<u,v>都不会有一条边相连,所以与u,v相连的结点一定在集合外面,所以independent set的补集一定是vertex cover的,显然,independent set和vertex cover其实是两个顶点互补的问题
【9】K-Coloring
找到一种染色方式,使得每一条边两个顶点的颜色都不一样
证明3COLORABLE is NP-hard: reduction from 3SAT
在多项式时间内,将3CNF formula reduce to 一个无向图,找到使3CNF formula为TRUE的安排,则可找到该无向图的3-coloring染色方式。
染色规则:
1)truth gadget :三个顶点均有边相连,需要三种颜色,三种颜色的名字就叫Ture,False,Other(任何一种颜色)
2)variable gadget:由上图,所以a和a逆的颜色只能是true,或false
3) clause gadget: a clause gadget for (a∨b∨c逆).
所以,已知一个3CNF formula为TRUE,可以由以上规则得到一个被染色的图;已知一个3-coloring的图,可以根据上述方式反推到一个值为TRUE的3CNF formula
【10】Hamiltonian Cycle (?)
给定一个图,判定是否有经过图中每个顶点且仅一次的回路
证明Hamiltonian Cycle is NP-hard: reduction from vertex cover
思路:已知一个图G和一个整数k,我们将其转换为另一个图G’,这样,当且仅当G的顶点覆盖为k时,G’才具有哈密顿环
转换规则:
对于原来图G中的每条边,我们在G’中用形式如下的edge gadget对应:
【11】 Subset Sum
给定一组整数X和一个整数t,确定集合X里是否具有其元素总和为t的子集。
证明Subset Sum is NP-hard: reduction from vertex cover
思路:给定一个图G和一个整数k,我们需要将其转换为一个整数集合X和一个整数t,这样,当且仅当图G的顶点覆盖为k时,集合X的子集总和为t。
转换规则:
1)将图G的边从0到m-1任意编号,对于每一条边i,集合X中有一个对应的整数 bi ,定义为4的i次方;对于每一个顶点v在集合中对应的整数ai,定义为:(dalta(v)是所有端点有v的边的集合)
即:集合X里,元素都是以4为底的
2)如果第m个整数表示顶点,则数字值为1,否则为0。对于i<m,如果第i个整数表示边i或者边i的一个顶点,则数字值为1,否则为0
所以,目标和定义为:
假设图G的顶点覆盖大小为k,认为有一个集合X的子集Y,其中元素是图G顶点覆盖的所有顶点v对应的整数ai,一个端点属于顶点覆盖的边i对应的整数bi,这些子集Y中元素的和刚好等于t。
【12】总结
————————————————
版权声明:本文为CSDN博主「我要笑遍全世界」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42241382/article/details/102636778
如何证明NP-Hard Problems相关推荐
- 惊天大突破!「我国数学家证明 NP=P」!道翰天琼认知智能机器人平台API接口大脑为您揭秘。
惊天大突破!「我国数学家证明 NP=P」!道翰天琼认知智能机器人平台API接口大脑为您揭秘. 2020年7月出版的<计算机科学>(中国计算机学会会刊)发表了国防科技大学教授.湘潭大学计算机 ...
- Np计算机领域,我国数学家证明NP=P
2020年7月出版的<计算机科学>(中国计算机学会会刊)发表了国防科技大学教授.湘潭大学计算机学院特聘教授姜新文题为<哈密顿图判定问题的多项式时间算法>的论文,这标志着在数学和 ...
- P问题、NP问题、NPC问题的概念及实例证明
美剧<基本演绎法>(也就是美版"福尔摩斯")第 2 季第 2 集中,两位研究 NP 问题的数学家被谋杀了,凶手是同行,因为被害者即将证明"P=NP 问题&qu ...
- 【计算理论】计算复杂性 ( NP 完全问题 - 布尔可满足性问题 ★ | 布尔可满足性问题是 NP 完全问题证明思路 ) ★
文章目录 一.NP 完全问题 - 布尔可满足性问题 ★ 二.布尔可满足性问题是 NP 完全问题证明思路 一.NP 完全问题 - 布尔可满足性问题 ★ 布尔可满足性问题 ( Boolean Satisf ...
- 模拟退火算法解决np_P和NP问题与解决方案| 演算法
模拟退火算法解决np P问题 (P Problems) P is the set of all the decision problems solvable by deterministic algo ...
- 什么是NP问题,什么是NP hard问题,什么是NP完全问题。
http://www.cs.pitt.edu/~ztliu/wordpress/2011/05/np-problem/ 首先解释一下什么是NP问题,什么是NP hard问题,什么是NP完全问题. 看下 ...
- P vs NP vs NP Complete vs NP Hard
目录 1.写在前面 2.千禧年世纪难题 3.P类和NP类问题特征 4.NPC问题 5.NP-Hard问题 6.总结 1.写在前面 我们看到一个问题,经常会说:"这个没法做,是一个NP问题&q ...
- p问题、np问题、npc问题、np难问题的理解(纯属个人见解)
最近因为要证明np问题,所以找了一系列概念去理解这4个问题.理解的时候看到好多人给出了不同的答案,我下面会借鉴别人的答案来总结出一份对于我自己来说,最容易理解这4个问题的说法. 预备知识了解: 这部分 ...
- P vs. NP 五十年:AI正在解决不可解问题
来源:AI科技评论 作者:Lance Fortnow 编译:Don 编辑:青暮 P和NP问题一直是计算机领域的老大难问题,那么在近50年间,人们对这个问题有什么深入的研究呢?让我们在本文中深挖这个世纪 ...
- p,np,npc,np难问题,确定图灵机与非确定图灵机
本文转自豆瓣_燃烧的影子 图灵机与可计算性 图灵(1912~1954)出生于英国伦敦,19岁进入剑桥皇家学院研究量子力学和数理逻辑.1935年,图灵写出了"论高斯误差函数"的论文, ...
最新文章
- 实验中遇到的Quartus II的Warning的解释、原因以及解决方法
- Ubuntu 16.04 Steam
- 若依集成jsencrypt实现密码加密传输方式
- bzoj 1617: [Usaco2008 Mar]River Crossing渡河问题(DP)
- java executor 例子_Java中Executor框架的实例
- DevOps使用教程 华为云(5)迭代计划 进度管理
- 目标检测之FPN网络详解
- Pyinstaller的安装和使用
- 高德导航过程中实时获取道路信息
- 【自然语言处理】【多模态】OFA:通过简单的sequence-to-sequence学习框架统一架构、任务和模态
- 不会产生ICMP差错报文的情况
- 一篇爽文带你全面了解mysql的索引
- 正点原子STM32(基于HAL库)3
- linux安全(1)
- Error(1.0.5 1107071739): D:\SAE_SDK_Windows_1.0.5\apps\/divjs/1/config.yaml is not existed解决方法...
- html从入门到精通胡菘,高职电商网页设计教学实践(共2831字).doc
- 垃圾邮件过滤python_手把手教你用 python 和 scikit-learn 实现垃圾邮件过滤
- HTML制作圣诞树,小白都会使用的教程。
- Endnote X7导入中文文献时,出现信息不全
- TwinCAT3 编程字体设置
热门文章
- [Giveaway] 来自AnyBizSoft、4Media、EASEUS的限时免费软件
- Java基础教程——字节流
- linux kprobe rootkit学习
- 引用数据类型的一些知识
- Posix信号量操作函数
- 漫谈 Clustering (3): Gaussian Mixture Model
- 孙鑫VC学习笔记:第十一讲 (三) 如何把元文件保存到文件当中
- 为什么败者树的访问外存次数要比胜者树少_为什么说蒙地卡罗搜索树MCTS是AlphaZero的核心?[AlphaZero理论篇之三]...
- c++求两点的距离利用友元_「20525」高中数学:“二面角”和“点到平面的距离”的通解...
- python和pytorch关系_pytorch 模拟关系拟合——回归实例