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

本周的内容是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是一个顶点覆盖集。

从上面等价条件来,我们可以从来证明。

令S为任意的独立集,考虑一条任意的边(u, v), 因为S为独立集

因此,V-S包含(u, v).

:

令V-S为任意的顶点覆盖集,考虑两个顶点u∈S和v∈S,因为V-S是一个顶点覆盖集,观察到(u, v)?E,因此,不存在S中的两个顶点连接同一条边。因此,S是一个独立集。

二、从特殊案例到一半案例的约减

定义集合覆盖:

集合覆盖(Set Cover):给定一个元素的集合U,一个U的子集的集合S1,S2,…Sm,和一个整数k,存在一个集合含有小于等于k个这样的集合的并等于U。

例:

上面的例子中,S2和S5即为满足的集合。

顶点覆盖集合(Vertex cover)可以约减为集合覆盖(Set Cover),即

证明:

给定一个顶点覆盖集合的实例G=(V,E),k,我们建立了一个集合覆盖实例,其大小等于顶点覆盖实例的大小。

创建过程:

创建集合覆盖实例:

集合覆盖的大小小于等于k当且仅当顶点覆盖的大小小于等于k。

三、通过子程序的编码来约减。

首先定义

literal:一个布尔变量或者它的否定:

clause子句:literal的析取:

合取范式(Conjunction Normal Form, CNF):子句clause的联合的一个命题公式

SAT:给出一个CNF公式它是否满足真命题的赋值

3-SAT:每一个子句包含恰好3个literals的SAT

上面的例子是一个SAT,但不是一个3-SAT。第3个clause再加一个literal就为3-SAT。

3-SAT可以约减到独立集,即

证明:

给定一个3-SAT的实例我们建立一个独立集的实例(G,K),有一个大小为k的独立集当且仅当是可以满足的。

创建过程:

G对于每一个子句包含3个顶点,对每一个literal有1个;再一个三角形中在一个子句中连接3个literals;连接每一个literal到自身的否定。

3可满足性可以约减到独立集。

G包含一个大小为的独立集,当且仅当是可满足的。

证明:

令S为大小为k的独立集,那么S在每一个三角形中包含恰好一个顶点,将这些literal全部设置为true,,其余的变量也保持一致,那么真命题赋值是一致的且所有的子句都满足

给定一个满足的命题, 从每一个三角形中选择一个为真的literal。那么这就是一个大小为k的独立集。

总结一下以上三种基本的约减方法:

传递性:

如:

决策问题:是够存在一个大小小于等于k的顶点覆盖?

搜索问题:找到有着最小基数的顶点覆盖

自约减性:搜索问题决策问题,将会应用到这一章节的所有问题中,并且

证明我们对于决策问题的聚焦。

例如:

我们想要找到具有最小技术的顶点覆盖

方法为:

(二进制)搜索找到最小顶点覆盖的基数k*

找到一个顶点v使得G-{v}有一个大小小于等于k*-1的顶点覆盖(在任何的最小顶点覆盖中的任意顶点都有这个性质)

将v包含到这个顶点覆盖中

递归找到一个最小的顶点覆盖G-{v}

下面开始探讨重点的NP问题

首先是决策问题。

X是字符串的一个集合,有一个实例字符串s,那么设计一个算法A解决问题X:使得A(s)=yes当且仅当s∈X

如果算法A是对于每一个字符串s运行在一个多项式时间内的,那么A(s)将会在最多第p(|s|)步终止,其中p(·)是某一个多项式。

定义P:

对一个有着多项式运行时间的算法的决策问题

NP问题:

认证算法的意图:

Certifier(证明者)是从管理的角度来看待事情的,并不能自己决定是否有s∈X,相反,他可以检验一个提出的证明这个s∈X。

定义:算法C(s,t)是一个问题X的证明者,如果对于每一个字符串s有s∈X当且仅当存在一个字符串t使得C(s,t) = yes.

NP是指存在一个多项式Certifier的决策问题,这是相对于P而言的定义。

例子:

给出一个整数s,s是一个合数(质数的反义)吗?

Certificate :s的一个重要的因子t,存在这样的一个凭证存在当且仅当s是一个合数。

Certifier:

如一个实例:

s = 437699

Certificate: t = 541 或者809

结论是:合数是一个NP问题

SAT:给出一个CNF公式是否存在一个满足条件的命题?

Certificate:对于n个布尔变量的真值的赋值

Certifier:检查中的每一个子句,是够含有至少一个真的literal

例如:

实例s

Certificate:

结论:SAT是一个NP问题

哈密顿环(Hamiltonian Cycle)

哈密顿环是:给定一个无向图G=(V, E), 存在一个简单环C能够访问每一个结点

Certificate:n个结点的排列

Certifier:检验排列中是否包含V中的每一个结点恰好出现一次,并且在排列中每一对相邻的结点之间是否存在一条边。

结论:哈密顿环是一个NP问题

那么P是否等于NP呢?

所有的完全多项式非确定性问题,都可以转换为一类叫做满足性问题的逻辑运算问题。既然这类问题的所有可能答案,都可以在多项式时间内计算,人们于是就猜想,是否这类问题,存在一个确定性算法,可以在多项式时间内,直接算出或是搜寻出正确的答案呢?这就是著名的NP=P?的猜想。

如果yes:那么有效的算法对3-Color,TSP, FACTOR, SAT…

如果No:没有有效的算法对3-Color,TSP, FACTOR, SAT…

一致的舆论为p≠NP

最后讨论的是NP完全问题。

问题X多项式约减(polynomial reduces, Cook提出的)到问题Y,如果问题X的任意实例可以使用下面的来解决:

A. 多项式数目的标准计算步骤,加上

B. 可以解决问题Y的oracle的多项式数目的调用

多项式转换(polynomialtransforms, Karp提出的)是指问题X多项式转换为问题Y如果给定一个任意的输入x给X,我们可以生成一个输出y使得x是X的一个yes实例当且仅当y是Y的一个yes实例。

多项式转换是一个对于Y而言只有一个oracle调用的多项式约减,就在对X的算法的最后。几乎所有之前的约减都是这种形式。

那么这两个对于NP而言是相同的吗?

NP完全问题是最难的问题。它的定义是:NP中的一个问题Y有这样的一个性质:对于NP中的任意问题X,有通俗上定义为,如果任何一个NP问题都能通过一个多项式时间算法转换为某个NP问题,那么这个NP问题就称为NP完全问题(Non-deterministic Polynomial complete
problem)。NP完全问题也叫做NPC问题。

完全多项式非确定性问题可以用穷举法得到答案,一个个检验下去,最终便能得到结果。但是这样算法的复杂程度,是指数关系,因此计算的时间随问题的复杂程度成指数的增长,很快便变得不可计算了。

定理:假设y是一个NP完全问题,那么y可以在多项式时间内解决当且仅当P=NP

证明:

←如果P=NP,那么因为y是一个NP问题,因此可以在多项式时间内被解决

→假定y可以在多项式时间内被解决,令X为任意一个NP问题。因为,我们可以在多项式时间内解决X,可以得出,又因为已知,因此有P=NP。

下面描述一个电路可满足性问题,在理论计算机科学中,电路可满足性问题(CIRCUIT-SAT)是决定一个给定的布尔电路是否有一个可以使得输出为true的输入的赋值的决策性问题。

给出一个由AND,OR和NOT门的联合电路,是否存在一个方法设置电路的输入使得其输出为1?

我们可以验证,CIRCUIT-SAT是一个NP完全问题。

证明:任何一个将固定数目的n位作为输入并且产生一个yes/no的输出的算法都可以被这样的一个电路来表示。并且,如果该算法花费多项式时间,那么电路也是多项式大小。(固定为n位是非常重要的,反应了算法和电路之间的基本区别)

考虑一个NP问题X,它有一个多项式时间certifier C(s, t).为了决策s是否在X中,我们需要知道是否存在一个长度为p(|s|)的凭证t使得C(s, t)=yes。

我们将C(s, t)看做是一个|s|+p(|s|)位的算法(输入为s,凭证为t),将其转化为一个多项式时间的电路K。前|s|位是用s硬编码的,剩下的p(|s|)位是t的位,那么电路K是可满足的当且仅当C(s,t)=yes。

例如:

上面的电路就创建了一个电路K,它的输入这样被设置使得K输出为真当且仅当图G有一个大小为2的独立集。

那么如何建立一个NP完全问题呢?

一旦我们建立了第一个NP完全问题,那么其他的也就是一个道理了。

建立问题y的完全NP问题的步骤:

1) 表明Y是一个NP问题

2) 选择一个完全NP问题X

3) 证明

可以证明3-SAT是一个NP完全问题。

下面这个图显示了NP完全问题以及可以多项式约减到另一个问题。

NP完全问题的6个种类和典型例子:

a)  包装问题:SET-PACKING,INDEPENDENT SET

b)  覆盖问题:SET-COVER, VERTEX-COVER

c)  约束满足问题:SAT, 3-SAT

d)  序列问题:HAMILTONIAN-CYCLE, TSP

e)  分区问题:3D-MATCHING, 3-COLOR

f)  数值问题:SUBSET-SUM, KNAPSACK

大部分的NP问题要么是P要么就是完全NP问题。

NP的对称:我们只需要有对于yes实例的简单证明即可。

1.  SATvs. TAUTOLOGY

可以证明对于一个给定的赋值,一个CNF公式是可以满足的,那么如何证明一个公式不可满足呢?

2.  HAM-CYCLEvs. NO-HAM-CYCLE

给定一个哈密顿环可以证明一个图是哈密顿,那么如何证明一个图不是哈密顿呢?

co-NP是NP决策问题的补集。

那么,NP=co-NP呢?

一致的舆论是不等于的。

如果有NP≠co-NP,那么P≠NP。但可以得出,

质数问题是一个NP∩co-NP的问题

(Pratt定理)一个奇数是一个质数当且仅当存在一个整数1<t<s,使得对于所有s-1的所有素除子p有

FACTORIZE:给定一个整数x,找出它的素因子

FACTOR:给定两个整数x和y,找出x是否有一个小于y的非凡因子。

定理:

FACTOR是一个NP∩co-NP的问题。

时间: 2024-08-02 06:48:07

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

算法课笔记系列(六)—— 图(Part2)

上一周去了一趟说走就走的治疗之旅,所以算法课都没能上.:( 不过,人生有过这样一次,很足够.只要永远做自己认为对的事情就不会有跨不过去的坎. 跟上周一样,这一周的内容包含几个小部分,分别为最短路径动态规划.所有点对之间的最短路径和网络流. 第一部分:最短路径动态规划 对于一个有向图G=(V, E), 每一条边权重为cvw(权重可为负), 问题是找到从节点s到t的最短的路径.如果边的权重中有负值,则Dijkstra方法不适用.因此我们想到一个办法,给每一个权值加上一个正常数使得每一条边的权重都为非

算法课笔记系列(九)——近似算法(Part1)

这一周的内容是近似算法(Approximation Algorithm). 对于许多的问题的算法,我们通常目标在于设计一个可以在多项式时间内运行的算法.然而,上一节的NP问题告诉我们这样的算法不一定存在.近似算法其实是针对NP难问题的一种退让,对于许多P不等于NP的最优化问题,无法在多项式时间内找到最优解.因此,如果可以只求一个我们可以接受的解,而不是非要最优解,那么可能存在一个多项式时间的算法. 因此,这里的"近似"其实就是针对最优化问题而言的.其主要应用也是用来解决最优化的问题,并

算法课笔记系列(七)—— 平摊分析

本周的内容是Amortized Analysis,是对算法复杂度的另一种分析.它的基本概念是,给定一连串操作,大部分的操作是非常廉价的,有极少的操作可能非常昂贵,因此一个标准的最坏分析可能过于消极了.因此,其基本理念在于,当昂贵的操作也别少的时候,他们的成本可能会均摊到所有的操作上.如果人工均摊的花销仍然便宜的话,对于整个序列的操作我们将有一个更加严格的约束.本质上,均摊分析就是在最坏的场景下,对于一连串操作给出一个更加严格约束的一种策略. 均摊分析与平均情况分析的区别在于,平均情况分析是平均所

Java基础复习笔记系列 八 多线程编程

Java基础复习笔记系列之 多线程编程 1. 2.

算法学习笔记(八) 动态规划的一般求解方法

1 一个问题:换零钱方式的统计 SICP 第一章 1.2.2 树形递归中,有这么一问题:给了半美元,四分之中的一个美元.10美分,5美分和1美分的硬币.将1美元换成零钱,一共同拥有多少种不同方式?更一般的问题是,给定了随意数量的现金,我们能写一个程序,计算出全部换零钱方式的种数吗? 2 动态规划的基本模型 动态规划(Dynamic programming,DP),是研究一类最优化问题的方法,通过把原问题分解为相对简单的子问题的方式求解复杂问题.动态规划处理的也就是是多阶段决策最优化问题,这一类问

算法学习笔记系列——分治法

一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并.这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换). 二.基本思想及策略 分治法设计思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之. 分治策略是:对于一个规模为n的问题,若该

算法学习笔记系列——动态规划法

一.基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划. 二.基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息.在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解.依次解决各子问题,最后一个子问题就是初始问题的解. 由于动态规划解决

七月算法-12月机器学习在线班--第十八次课笔记-条件随机场CRF

七月算法-12月机器学习在线班--第十八次课笔记-条件随机场CRF 七月算法(julyedu.com)12月机器学习在线班学习笔记http://www.julyedu.com 1,对数线性模型 一个事件的几率odds,是指该事件发生的概率与该事件不发生的概率的比值. 1.1对数线性模型的一般形式 令x为某样本,y是x的可能标记,将Logistic/ Softmax回归的特征 记做 特征函数的选择:eg: 自然语言处理 1, 特征函数几乎可任意选择,甚至特征函数间重叠: 2, 每个特征之和当前的词

七月算法--12月机器学习在线班-第三次课笔记—矩阵和线性代数

七月算法--12月机器学习在线班-第三次课笔记—矩阵和线性代数 七月算法(julyedu.com)12月机器学习在线班学习笔记 http://www.julyedu.com