布尔表达式可满足性问题(SAT)与库克-列文定理(下)
上接布尔表达式可满足性问题(SAT)与库克-列文定理(上)。(发布博客的时候说正文字数太长,必须分几篇发布qwq。而且CSDN的公式字体突然变得贼难看,不知道为啥awa。)
四、库克-列文定理
定理(Cook-Levin Theorem) 布尔表达式可满足性问题是NP\bold{NP}NP完全问题。
证明:
设布尔表达式可满足性问题为SAT={x∈{0,1}∗∣x代表一个可满足的布尔表达式}\text{SAT}=\{x\in\{0,1\}^*|x\text{代表一个可满足的布尔表达式}\}SAT={x∈{0,1}∗∣x代表一个可满足的布尔表达式}。
(1) 先证SAT∈NP\text{SAT}\in\bold{NP}SAT∈NP。显然,对于任一个可满足的布尔表达式,它的一组赋值就是对它的一个证明,而进行验证只需要把值带进去算就可以了,显然可以在多项式时间内完成。因此,SAT\text{SAT}SAT问题可在多项式时间内验证,SAT∈NP\text{SAT}\in\bold{NP}SAT∈NP。
(2) 再证∀L∈NP\forall L\in\bold{NP}∀L∈NP,L≤pSATL\le_p\text{SAT}L≤pSAT。因为LLL属于NP\bold{NP}NP,所以存在非确定性图灵机M=(Q,Σ,q0,B,A,δ)M=(Q,\Sigma,q_0,B,A,\delta)M=(Q,Σ,q0,B,A,δ)使得MMM能够在多项式时间内判定LLL。对于任意输入w∈Lw\in Lw∈L,我们给出一个布尔表达式EEE,使得EEE是可满足的当且仅当MMM接受www。这样,要判定www是否属于LLL的时候,只需判定对应的EEE是不是可满足的,从而将LLL归约到SAT\text{SAT}SAT。
接下来我们构造EEE。设p(n)p(n)p(n)是一个多项式函数(n=∣w∣n=|w|n=∣w∣),它代表MMM的运行步数;q∈Qq\in Qq∈Q,−p(n)≤i≤p(n)-p(n)\le i\le p(n)−p(n)≤i≤p(n)(一个只能运行p(n)p(n)p(n)步的图灵机必不可能访问距初始位置p(n)p(n)p(n)格以外的格子),j∈Σj\in\Sigmaj∈Σ,0≤k≤p(n)0\le k\le p(n)0≤k≤p(n)。我们构造的布尔表达式EEE中将用到以下变量:
变量 解释 个数 Ti,j,kT_{i,j,k}Ti,j,k 当计算进行到第kkk步,且MMM的带上第iii的元素是字符jjj时,取真。 O(p(n)2)O\left(p(n)^2\right)O(p(n)2) Hi,kH_{i,k}Hi,k 当计算进行到第kkk步,且MMM的读写头指向带的第iii格时,取真。 O(p(n)2)O\left(p(n)^2\right)O(p(n)2) Qq,kQ_{q,k}Qq,k 当计算进行到第kkk步,且MMM处于状态qqq时,取真。 O(p(n))O(p(n))O(p(n)) 定义EEE是iii取遍−p(n)-p(n)−p(n)到p(n)p(n)p(n),kkk取遍000到p(n)p(n)p(n)是,下列所有表达式的合取:
表达式 条件 解释 个数 Ti,j,0T_{i,j,0}Ti,j,0 带上第iii格一开始是字符jjj 约束带的初始内容。对于i>n−1i>n-1i>n−1和i<0i<0i<0处(即输入www之外的地方),初始符号都是BBB(空)。 O(p(n))O(p(n))O(p(n)) Qq0,0Q_{q_0,0}Qq0,0 约束MMM的初始状态为q0q_0q0。 111 H0,0H_{0,0}H0,0 约束读写头的初始位置为i=0i=0i=0处。 111 ¬Ti,j,k∨¬Ti,j′,k\neg T_{i,j,k}\lor\neg T_{i,j',k}¬Ti,j,k∨¬Ti,j′,k ∀j≠j′\forall j\ne j'∀j=j′ 带的每一格只能有一个元素,同时有多个元素的情况。 O(p(n)2)O\left(p(n)^2\right)O(p(n)2) ⋁j∈ΣTi,j′,k\bigvee\limits_{j\in\Sigma}T_{i,j',k}j∈Σ⋁Ti,j′,k 带的每一格至少有一个元素,与上一条配合使用。 O(p(n)2)O\left(p(n)^2\right)O(p(n)2) Ti,j,k∧Ti,j′,k+1→Hi,kT_{i,j,k}\land T_{i,j',k+1}\to H_{i,k}Ti,j,k∧Ti,j′,k+1→Hi,k ∀j≠j′\forall j\ne j'∀j=j′ 除非带被写,否则保持不变。
即:当Ti,j,kT_{i,j,k}Ti,j,k和Ti,j′,k+1T_{i,j',k+1}Ti,j′,k+1同时成立,读写头此时一定在第iii格处。O(p(n)2)O\left(p(n)^2\right)O(p(n)2) ¬Qq,k∨¬Qq′,k\neg Q_{q,k}\lor\neg Q_{q',k}¬Qq,k∨¬Qq′,k ∀q≠q′\forall q\ne q'∀q=q′ 每时每刻MMM只能由一个状态。 O(p(n))O(p(n))O(p(n)) ¬Hi,k∨¬Hi′,k\neg H_{i,k}\lor\neg H_{i',k}¬Hi,k∨¬Hi′,k ∀i≠i′\forall i\ne i'∀i=i′ 每时每刻读写头只能有一个位置。 O(p(n)3)O\left(p(n)^3\right)O(p(n)3) (Hi,k∧Qq,k∧Ti,σ,k)→⋁((q,σ),(q′,σ′,d))∈δ(Hi+d,k+1∧Qq′,k+1∧Ti,σ′,k+1)\left(H_{i,k}\land Q_{q,k}\land T_{i,\sigma,k}\right)\to\bigvee\limits_{((q,\sigma),(q',\sigma',d))\in\delta}(H_{i+d,k+1}\land Q_{q',k+1}\land T_{i,\sigma',k+1})(Hi,k∧Qq,k∧Ti,σ,k)→((q,σ),(q′,σ′,d))∈δ⋁(Hi+d,k+1∧Qq′,k+1∧Ti,σ′,k+1) ∀k<p(n)\forall k<p(n)∀k<p(n) 进行到第kkk步、读写头在第iii格时、状态为qqq时,转移到所有可能的格局。 O(p(n)2)O\left(p(n)^2\right)O(p(n)2) ⋁0≤k≤p(n)⋁f∈AQf,k\bigvee\limits_{0\le k\le p(n)}\bigvee\limits_{f\in A}Q_{f,k}0≤k≤p(n)⋁f∈A⋁Qf,k MMM必须在p(n)p(n)p(n)步内在一个接受状态停机。 1 这样一来,如果MMM对输入www有一个计算序列可以进入停机格局,那么根据对应的计算过程给变量Ti,j,k,Hi,k,Qi,kT_{i,j,k},H_{i,k},Q_{i,k}Ti,j,k,Hi,k,Qi,k赋值,就可以得出EEE是可满足的。另一方面,如果EEE是可满足的,那么它一定存在一组成真赋值,根据这组赋值就可以得出MMM的运行过程(即每一步如何选择)。
最后只需证明这个归约是多项式时间的归约。总共有O(p(n)2)O\left(p(n)^2\right)O(p(n)2)个布尔变量,每个变量都可以在O(logp(n))O(\log p(n))O(logp(n))的空间内编码成二进制串。子句的个数为O(p(n)3)O\left(p(n)^3\right)O(p(n)3),所以EEE的大小为O(log(p(n))p(n)3)O\left(\log(p(n))p(n)^3\right)O(log(p(n))p(n)3),是nnn的多项式函数。因此这个归约是多项式时间的。
Q.E.D.\text{Q.E.D.}Q.E.D.
这个归约到底是怎么运作的呢?首先,L∈NPL\in\bold{NP}L∈NP,因此非确定型图灵机MMM到底怎么写我们是完全知道的。那么对于任意输入w∈Lw\in Lw∈L,我们就根据上面的规则,把MMM的运作过程转化成布尔表达式。因为MMM的运作步数是www的多项式函数,而把运作过程转化成布尔表达式需要多项式大小的空间,且在这些空间上我们不需进行多余的计算,一份空间对应一份时间,所以归约的时间复杂度是多项式函数。
参考文献
- 美国克雷数学研究所对P=NP?问题的官方表述:https://www.claymath.org/sites/default/files/pvsnp.pdf
- https://en.wikipedia.org/wiki/Boolean_satisfiability_problem
- https://en.wikipedia.org/wiki/Cook%E2%80%93Levin_theorem
- https://plato.stanford.edu/entries/turing-machine/
- https://math.stackexchange.com/questions/4302872/why-does-alan-turing-proof-of-the-halting-problem-is-considered-a-proof-that-mat
- https://www.geeksforgeeks.org/difference-between-turing-machine-and-universal-turing-machine/
- https://en.wikipedia.org/wiki/P_(complexity)
- https://en.wikipedia.org/wiki/NP_(complexity)
- https://en.wikipedia.org/wiki/Certificate_(complexity)
- https://gaming.stackexchange.com/questions/20219/is-minecraft-turing-complete
- 《算法导论》(机械工业出版社)
- 《离散数学》(清华大学出版社)
- https://en.wikipedia.org/wiki/Reduction_(complexity)
- 《计算复杂性:现代方法》(机械工业出版社)
- https://en.wikipedia.org/wiki/Nondeterministic_Turing_machine
- https://cs.stackexchange.com/questions/58154/how-does-nondeterministic-time-relate-to-verifiability
布尔表达式可满足性问题(SAT)与库克-列文定理(下)相关推荐
- 布尔表达式可满足性问题(SAT)与库克-列文定理(上)
下篇:布尔表达式可满足性问题(SAT)与库克-列文定理(下). 文章目录 一.布尔表达式可满足性问题(Boolean Satisfiability Problem, SAT) 二.形式语言与自动机 1 ...
- 高效算法——05列文斯登距离(Python)
05列文斯登距离 定义:给定两个序列x和y,需要多少次增.删.改的操作,才能把x变成y? 输入:AUDI,LADA 输出:3 复杂度: O(nm) 算法: #coding=utf-8 "& ...
- 软件项目开发计划【列文】2022.5.11
信息系统分析与设计--系列文章 一.<软件项目开发计划[列文]2022.5.11> 二.<GB-软件需求说明书[列文]2022-5.6> 三.<需求分析文档--适用范围: ...
- 开发进度月报【列文】2022.5.11
信息系统分析与设计--系列文章 一.<软件项目开发计划[列文]2022.5.11> 二.<GB-软件需求说明书[列文]2022-5.6> 三.<需求分析文档--适用范围: ...
- Levenberg-Marquardt(列文伯格-马夸尔特)算法
什么是最优化? Levenberg-Marquardt算法是最优化算法中的一种.最优化是寻找使得函数值最小的参数向量.它的应用领域非常广泛,如:经济学.管理优化.网络分析 .最优设计.机械或电子 ...
- 高斯牛顿(Gauss Newton)、列文伯格-马夸尔特(Levenberg-Marquardt)最优化算法与VSLAM
转载请说明出处:http://blog.csdn.net/zhubaohua_bupt/article/details/74973347 在VSLAM优化部分,我们多次谈到,构建一个关于待优化位姿的误 ...
- pythonslice_shift_Pandas 解决dataframe的一列进行向下顺移问题
最近做比赛,有时候需要造出新的特征,而这次遇到的问题是将一列数据往下顺移一位.同时将开头缺失的那一个数据用其他方式填充. df['feature'].shift(1)向下顺移一位,这时第一位会置为na ...
- 接口文档下的渗透测试(Swagger)
接口文档背景 随着前后端分离架构的优势越来越明显,前后端分离的应用场景也越来越广,如今前后端分离已成为互联网项目开发的业界标准使用方式,而为了前后端程序员在实际开发中能够有统一的接口文档去调试,因此也 ...
- python怎么让画笔向下移动_Pandas 解决dataframe的一列进行向下顺移问题
最近做比赛,有时候需要造出新的特征,而这次遇到的问题是将一列数据往下顺移一位.同时将开头缺失的那一个数据用其他方式填充. df['feature'].shift(1)向下顺移一位,这时第一位会置为na ...
- excel整列动态联动下拉_在Excel下拉列表中显示多列
excel整列动态联动下拉 A data validation drop down list in Excel only shows one column of items. See how to s ...
最新文章
- expert one on one oracle,数据库表——EXPERT ONE-ON-ONE ORACLE
- java socket wex5_WeX5集成ActiveMQ+WebSocket实现消息推送
- React Native 模仿网易云音乐手机客户端,兼容安卓和IOS两个平台
- Unity内置的三套消息发送机制的应用实例
- ueditor1_4_3_3编辑器的应用
- 两列布局左边定宽,右边自适应
- java utf-8字符表_Java中的ASCII、Unicode和UTF-8字符编码集
- 20172329 2017-2018-2 《程序设计与数据结构》实验一报告
- 监督学习 | 线性回归 之多元线性回归原理及Sklearn实现
- 漫步最优化四十二——Partan法
- c# mysql存储过程 输出参数值_MySQL 存储过程参数用法 in, out, inout
- JDK8新特性(一)之Lambda表达式
- 热门好用的空号检测API推荐
- 机房交换机网络测试软件,国内IDC机房带宽测试工具和方案
- SaaS(软件即服务)的魅力
- Java整合ORC识别验证码
- Element学习使用
- dubbo问题:forbid consumer报错
- Chrome中devtools安装
- myeclipse中生成web service时出现异常Unable to create JAXBContext