算法课笔记系列(八)——NP问题及其计算复杂性

本文详细介绍了NP问题的概念,包括多项式时间规约、NP的定义以及分类。通过简单等价规约、从特殊案例到一般案例的规约和通过子程序的编码来规约三种方法解释了问题的相对难度。还探讨了P是否等于NP的猜想,并介绍了NP完全问题及其重要性。文章以电路可满足性问题为例,展示了如何证明一个问题是NP完全的。
摘要由CSDN通过智能技术生成

本周的内容是NP问题,NP的全称是Non-deterministic Polynomial,即多项式复杂程度的非确定性问题。度上对NP的解释是,P/NP问题是在理论信息学中计算复杂度理论里至今没有解决的问题。通俗的说,是将不可知的问题转化为已知的问题,进而计算器复杂度。

首先介绍多项式时间的规约,即Polynomial-Time Reductions,通过解决另一个不同问题的假设的子程序,使用不包含子程序在内的多项式时间来解决一个问题的方法。主观上,一个多项式时间规约证明了第一个问题不比第二个问题难,因为只要对于第二个问题有有效的解决办法,那么对于第一个问题就一定也存在解决方法。

根据计算的复杂度,我们可以将问题分为两类,一种是可以在多项式时间内解决的,另一种是不能在多项式时间内被解决的。下面的表格给出了一些算法。

                                                

一些问题被证明需要指数时间:

1.给定一台图灵机,它能否在最多k步的时候停止?

2.给定一个nxn的棋盘,黑棋能够保证赢吗?

一个不乐观的消息是几十年来大量的基础问题都忽略了分类。这一节的内容是表明这些基本问题是计算等价的,似乎是一个非常难问题的不同表现。

 

假设我们可以在多项式时间内解决X问题,那么我们在多项式时间内能解决其他什么问题吗?这里引入Reduction的定义。

Reduction:问题X可以多项式规约为问题Y,如果问题X的任意实例可以使用下面的条件被解决:

A) 多项式数量的标准计算步骤加上,

B) 可以解决问题Y的oracle多项式数目次的调用,这里,oracle是特殊硬件提供的可以在单步中解决Y的实例的计算模型。

表示为

这里,X是已知的可以在多项式时间内解决的问题,Y是不可知复杂度的问题。中间的符号表示,有方法将X转换为Y,有点类似于小于等于符号的含义是表明X的复杂度小于等于Y的复杂度,一般情况下,符号中p的上面会有一个m,表示可以是many to one reduction,也就是可以是多对一的映射。如果X有polynomial-time解,那么该解是下界;如果Y有polynomial-time解,那么该解是上界。

因此多项式时间的规约的目的是根据问题的相对困难度来对问题分类的。如果有,y可以在多项式时间内被解决,那么X一定也能在多项式时间内被解决;如果,X不能够在多项式时间内被解决,那么y也不能在多项式时间内被解决。

我们也可以建立等价性,这里的等价是指的reduction的成本。如果,那么我们可以表示为

下面有三个基本的规约策略,通过简单等价规约、从特殊案例到一般案例的规约和通过子程序的编码来规约

 

一、简单等价规约

首先定义独立集(IndependentSet, 我们在Matroid中已经学习过),给定一个图G=(V, E)和一个整数k,存在一个顶点的子集,对于每一条边至多其中一个端点在S中。

如下图:

                   

对于上图,存在一个大小大于等于6的独立集,但是不存在大小大于等于7的独立集。

下面定义一个顶点覆盖集,给定一个图G=(V, E)和一个整数k,存在一个顶点的子集,对于每一条边至少其中一个端点在S中。

例如:

                   

对于上图,存在一个大小小于等于4的顶点覆盖集,但是不存在一个大小小于等于3的顶点覆盖集。

对于顶点覆盖集合和独立集,有


其实从上面两个图,我们就可以看出,两个集合互补。S是一个独立集当且仅当V-S是一个顶点覆盖集。

                   

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值