计算复杂度基础(暂记):P与NP,NP完全问题(NPC)证明

计算复杂度基础

时间复杂度的刻画

P    c l a s s 代 表 的 是 所 有 的 多 项 式 时 间 复 杂 可 解 问 题 的 集 合 P 问 题 : 有 多 项 式 时 间 可 解 算 法 的 问 题 , 比 如 : 欧 拉 回 路 N o n − d e t e r m i n i s t i c    P 问 题 : 可 以 在 多 项 式 的 时 间 里 验 证 一 个 解 的 问 题 。 N P − c o m p l e t e : 最 “ 完 整 的 ” N P 问 题 哈 密 顿 回 路 N P − h a r d P r o b l e m : 对 于 判 定 问 题 A , 若 A 满 足 : 所 有 的 N P 问 题 都 可 以 约 化 到 它 。 ( N P − H a r d 问 题 要 比 N P C 问 题 的 范 围 广 ) P\ \ class 代表的是所有的多项式时间复杂可解问题的集合\\ P问题:有多项式时间可解算法的问题,比如: 欧拉回路\\ Non-deterministic\ \ P问题:可以在多项式的时间里验证一个解的问题。 \\ NP-complete :最“完整的”NP问题 哈密顿回路\\ NP-hard Problem: 对于判定问题A,若A 满足: 所有的 NP 问题都可以约化到它。(NP-Hard问题要比 NPC问题的范围广) P  classPNondeterministic  PNPcompleteNPNPhardProblem:AA:NPNPHardNPC广
在这里插入图片描述

问题的转换

任何一个问题都是一个“问题”与“解”的二元对应
优化问题能不能写成判定问题,是否所有问题都能转化成判定问题?是。

优化问题提:找G中两个定点间的最短路
判定问题:是否存在路径最小为k的路径,k为正数(连续问一群这样的问题)

编码与转换(同一个算法解决一个问题是否为P与编码无关)

判定问题的回答有0与1,这样就产生了“编码”{0,1}*(由0,1组成的序列)

编 码 会 改 变 复 杂 度 吗 ?     − − −    N o     编码会改变复杂度吗?\ \ \ --- \ \ No \ \ \ ?     No   
例:整数k的编码:
11111 k 个 1 , 算 法 A 使 用 O ( k ) 可 解 二 进 制 编 码 长 n = l o g 2 k 下 取 整 + 1 , 使 用 算 法 A 是 2 n , 指 数 复 杂 度 问 题 这 与 实 际 好 像 不 符 1 1 1 1 1 k个1,算法A使用O(k)可解\\ 二进制编码 长n={log_2k}_{下取整}+1,使用算法A是2^n,指数复杂度问题\\ 这与实际好像不符 11111k1A使Okn=log2k+1,使A2n

多 项 式 相 关 的 两 个 问 题 的 编 码 , 其 一 多 项 式 可 解 , 另 一 个 也 可 多 项 式 时 间 复 杂 度 两 个 编 码 多 项 式 相 关 : 两 个 编 码 如 果 存 在 一 个 多 项 式 时 间 可 计 算 的 函 数 f , f ( e 1 ) = e 2 多项式相关的两个问题的编码,其一多项式可解,另一个也可多项式时间复杂度\\ 两个编码多项式相关:\color{red}两个编码如果存在一个多项式时间可计算的函数f,f(e_1)=e_2 :f,f(e1)=e2

语言

集合\sigma ={0,1},二进制语言(词典)\sigma^是由\sigma 中元素构成的
可以通过一个问题提来定义一种语言L:L是\sigma^
的子集{x\in L,\Sigma(x)=1}

P复杂度的语言:对于任意一个长为n的串,算法A能判定其是否再语言L中。
可以通过一个算法提来定义一种语言L:L={x\in L,A(x)=1}

P class 的另一个表述 Pclass={L\subset {0,1}^*}

NP类问题将问题分为求解和验证两个阶段,问题的求解是非确定性的,无法在多项式时间内得到答案,而问题的验证却是确定的,能够在多项式时间里确定结果。添加链接描述

规约

一个问题A可以约化为问题B的含义即是,问题A可以“变成”问题B,可以用问题B的解法解决问题A。
B的时间复杂度高于或者等于A的时间复杂度。也就是说,问题A不比问题B难。

ABAtoB(规约可以理解为小于等于,与离散中的偏序关系类似。)
求解一个一元一次方程求解一个一元二次方程
Hamilton回路TSP问题(Travelling Salesman Problem,旅行商问题)在Hamilton回路问题中,两点相连即这两点距离为0,两点不直接相连则令其距离为1,于是问题转化为在TSP问题中,是否存在一条长为0的路径。Hamilton回路存在当且仅当TSP问题中存在长为0的回路。

在这里插入图片描述

NPC问题

如何证明一个问题是NP-Hard或NP-Complete?
NPC问题的定义非常简单。同时满足下面两个条件的问题就是NPC问题。首先,它得是一个NP问题;然后,所有的NP问题都可以约化到它。
A    i s    N P C    { A    i s    N P B    i s    N P C , B ≤ p A A\;is\;NPC\;\left\{\begin{array}{l} A\; is\; NP\\ B\; is \; NPC , B \leq_p A\end{array}\right. AisNPC{AisNPBisNPC,BpA

NPC问题de证明

在这里插入图片描述

SAT问题:逻辑电路满足问题。第一个NPC问题。

所有的算法都是可以编码为boolean formula问题,这意味着所有算法都可以使用SAT的求解器去求解,因为他们本质上就是boolean formula问题即(…∨…∨…)∧(…∨…∨…)∧…。
证明略。

3-CNF-SAT

证明方法: 仅 需 证 S A T ≤ p 3 − N C F − S A T 仅需证SAT\leq_p 3-NCF-SAT SATp3NCFSAT
ϕ 为 一 个 逻 辑 电 路 公 式 \phi为一个逻辑电路公式 ϕ

在这里插入图片描述
在这里插入图片描述
使 用 德 莫 根 律 等 定 律 划 归 使用德莫根律等定律划归 使
在这里插入图片描述
在这里插入图片描述

Shortest Clique Problem(最短团问题)

送分题:
C l i q u e 问 题 描 述 : 就 是 找 到 一 个 图 大 小 为 k 的 团 , 其 中 团 是 一 个 完 全 图 ( 每 个 结 点 相 互 联 结 ) 。 Clique问题描述\\ :就是找到一个图大小为k的团,其中团是一个完全图(每个结点相互联结)。 Cliquek

1.先证明多项式时间可以验证
在这里插入图片描述

ϕ = C 1 ∧ C 2 … … ∧ C k , 每 个 子 句 C 有 3 个 文 字 如 以 下 的 情 况 , 将 ϕ = ( x 1 ∨ ¬ x 2 ∨ x 3 ) ∧ ( ¬ x 1 ∨ x 2 ∨ x 3 ) ∧ ( x 1 ∨ x 2 ∨ x 3 ) 转 化 为 一 个 图 G , 用 ϕ 的 每 个 子 句 中 的 三 个 点 代 表 图 G 中 的 一 个 点 , 若 使 得 ϕ 为 真 , 只 需 要 每 组 ( 每 个 括 号 内 ) 存 在 一 个 真 值 ϕ 的 一 个 可 满 足 性 赋 值 , 可 以 构 成 一 个 k 团 \phi=C_1\wedge C_2 …… \wedge C_k,每个子句C有3个文字\\ \color{red}如以下的情况,将\phi=(x_1\vee \neg x_2 \vee x_3)\wedge(\neg x_1\vee x_2 \vee x_3)\wedge(x_1\vee x_2 \vee x_3)\\转化为一个图G,用\phi的每个子句中的三个点代表图G中的一个点,\\ 若使得\phi为真,\\只需要每组(每个括号内)存在一个真值\\ \phi的一个可满足性赋值,可以构成一个k团 ϕ=C1C2CkC3ϕ=(x1¬x2x3)(¬x1x2x3)(x1x2x3)G,ϕG使ϕ()ϕk
在这里插入图片描述
在这里插入图片描述

按 照 以 上 规 则 , ϕ 的 一 个 可 满 足 性 赋 值 , 可 以 构 成 一 个 k 团 按照以上规则,\phi的一个可满足性赋值,可以构成一个k团 ϕk

在这里插入图片描述

subset sum子集和问题

subset sum
给定一个包含N个非负数的set, 并且给定K, 从集合中找出一组元素子集, 使得这组子集的各个元素相加起来和是K。
在这里插入图片描述

vertex cover无向图的顶点覆盖问题:

顶点覆盖问题的例子

在这里插入图片描述
以 上 例 子 中 w 和 z 是 一 个 顶 点 覆 盖 , 并 且 是 最 小 的 , k = 2 顶 点 覆 盖 问 题 的 描 述 : V E R T E X − C O V E R = ( G , k ) : G r a p h G 有 大 小 为 k 的 顶 点 覆 盖 以上例子中w和z是一个顶点覆盖,并且是最小的,k=2\\ 顶点覆盖问题的描述:\\ VERTEX-COVER=\\{(G,k):Graph G有大小为k的 顶点覆盖}\\ wzk=2VERTEXCOVER=(G,k):GraphGk

1. 首 先 其 应 该 是 一 个 N P 问 题 对 所 有 边 进 行 遍 历 即 可 , 判 断 边 是 否 与 顶 点 相 连 1.首先其应该是一个NP问题\\ 对所有边进行遍历即可,判断边是否与顶点相连 1.NP

2. 转 化 ( 规 约 ) 团 问 题 : 无 向 图 中 找 最 大 定 点 集 合 称 为 完 全 图 C L I Q U E ≤ p V E R T E X − C O V E R 2.转化(规约)\\ 团问题:无向图中找最大定点集合称为完全图\\ CLIQUE \leq_{p} VERTEX-COVER 2.()CLIQUEpVERTEXCOVER

G = ( V , E ) , G 的 边 的 补 G ˉ = { V , E ˉ } , E ˉ 为 G 中 的 补 边 集 E ˉ = { ( u , v ) : u , v ∈ V , a n d ( u , v ) ∉ E } G=(V,E),G的边的补\bar G =\{V,\bar E \},\bar E为G中的补边集\\ \tiny \bar E=\{ (u,v):u,v\in V,and(u,v)\notin E \} G=(V,E),GGˉ={V,Eˉ},EˉGEˉ={(u,v):u,vV,and(u,v)/E}

r e d u c t i o n    a l g o r i t h m 输 入 为 ( G , k ) 的 团 问 题 , 能 在 多 项 式 时 间 求 出 G ˉ , 输 出 为 ( G ˉ , ∣ V ∣ − ∣ V ′ ∣ ) 的 顶 点 覆 盖 问 题 V ′ 为 G ˉ 中 团 的 点 , “ G ˉ 中 的 非 团 中 ” 的 顶 点 为 顶 点 覆 盖 的 顶 点 G ˉ 中 的 边 都 是 不 用 覆 盖 的 , G ˉ 中 的 边 至 多 有 一 个 顶 点 不 属 于 团 reduction \ \ algorithm \\ 输入为(G,k)的团问题,能在多项式时间求出\bar G,输出为(\bar G,|V|-|V'|)的顶点覆盖问题\\ V'为\bar G中团的点,“\bar G中的非团中”的顶点为顶点覆盖的顶点\\ \bar G中的边都是不用覆盖的,\bar G中的边至多有一个顶点不属于团 reduction  algorithm(G,k),Gˉ(Gˉ,VV)VGˉ,GˉGˉ,Gˉ

在这里插入图片描述
在这里插入图片描述

Hamiltonian Cycle(哈密顿回路):

在这里插入图片描述

TSP

在这里插入图片描述

参考

Algorithms and Networks by Hans L. Bodlaender Johan M. M. van Rooij
算法导论的chapter34,35

NP问题的补问题不一定是NP的

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,NP问题是指可以在多项式时间内验证一个解的问题集合,而NP完全问题则是NP问题中最难的问题,所有NP问题都可以在多项式时间内约化为NP完全问题。而NAE-3SAT问题是指判断一个由若干个逻辑变量和若干个逻辑表达式组成的布尔公式是否存在一组真假值,使得每个逻辑表达式至少有一个变量取值为真,至少有一个变量取值为假。 为了证明NAE-3SAT问题NP完全问题,我们需要证明两个方面:首先证明NAE-3SAT问题是一个NP问题,其次证明所有NP问题都可以在多项式时间内约化为NAE-3SAT问题。 对于第一个问题,我们可以设计一个多项式时间的算法来验证一个NAE-3SAT问题的解是否正确。具体地,我们只需要检查每个逻辑表达式是否至少有一个变量取值为真,至少有一个变量取值为假,并且检查所有逻辑表达式的值是否都为真。这个算法的时间复杂度是多项式时间,因此NAE-3SAT问题是一个NP问题。 对于第二个问题,我们需要证明所有NP问题都可以在多项式时间内约化为NAE-3SAT问题。我们可以通过将一个NP问题的实例转化为一个NAE-3SAT问题的实例来实现这个约化。具体地,我们可以将一个NP问题的实例表示为一个布尔公式,然后将这个布尔公式转化为一个NAE-3SAT问题的实例。具体地,我们可以将每个逻辑表达式转化为一个NAE-3SAT问题的子问题,其中每个子问题都包含一个逻辑表达式中的所有变量和一个附加的变量,这个附加的变量表示逻辑表达式的值是否为真。然后,我们将所有子问题的结果通过逻辑与连接起来,得到一个最终的NAE-3SAT问题的实例。 由于NP问题可以在多项式时间内约化为NAE-3SAT问题,而NAE-3SAT问题是一个NP问题,因此NAE-3SAT问题NP完全问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值