上接布尔表达式可满足性问题(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≤p​SAT。因为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(log⁡p(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的多项式函数,而把运作过程转化成布尔表达式需要多项式大小的空间,且在这些空间上我们不需进行多余的计算,一份空间对应一份时间,所以归约的时间复杂度是多项式函数。

参考文献

  1. 美国克雷数学研究所对P=NP?问题的官方表述:https://www.claymath.org/sites/default/files/pvsnp.pdf
  2. https://en.wikipedia.org/wiki/Boolean_satisfiability_problem
  3. https://en.wikipedia.org/wiki/Cook%E2%80%93Levin_theorem
  4. https://plato.stanford.edu/entries/turing-machine/
  5. https://math.stackexchange.com/questions/4302872/why-does-alan-turing-proof-of-the-halting-problem-is-considered-a-proof-that-mat
  6. https://www.geeksforgeeks.org/difference-between-turing-machine-and-universal-turing-machine/
  7. https://en.wikipedia.org/wiki/P_(complexity)
  8. https://en.wikipedia.org/wiki/NP_(complexity)
  9. https://en.wikipedia.org/wiki/Certificate_(complexity)
  10. https://gaming.stackexchange.com/questions/20219/is-minecraft-turing-complete
  11. 《算法导论》(机械工业出版社)
  12. 《离散数学》(清华大学出版社)
  13. https://en.wikipedia.org/wiki/Reduction_(complexity)
  14. 《计算复杂性:现代方法》(机械工业出版社)
  15. https://en.wikipedia.org/wiki/Nondeterministic_Turing_machine
  16. https://cs.stackexchange.com/questions/58154/how-does-nondeterministic-time-relate-to-verifiability

布尔表达式可满足性问题(SAT)与库克-列文定理(下)相关推荐

  1. 布尔表达式可满足性问题(SAT)与库克-列文定理(上)

    下篇:布尔表达式可满足性问题(SAT)与库克-列文定理(下). 文章目录 一.布尔表达式可满足性问题(Boolean Satisfiability Problem, SAT) 二.形式语言与自动机 1 ...

  2. 高效算法——05列文斯登距离(Python)

    05列文斯登距离 定义:给定两个序列x和y,需要多少次增.删.改的操作,才能把x变成y? 输入:AUDI,LADA 输出:3 复杂度: O(nm) 算法:  #coding=utf-8 "& ...

  3. 软件项目开发计划【列文】2022.5.11

    信息系统分析与设计--系列文章 一.<软件项目开发计划[列文]2022.5.11> 二.<GB-软件需求说明书[列文]2022-5.6> 三.<需求分析文档--适用范围: ...

  4. 开发进度月报【列文】2022.5.11

    信息系统分析与设计--系列文章 一.<软件项目开发计划[列文]2022.5.11> 二.<GB-软件需求说明书[列文]2022-5.6> 三.<需求分析文档--适用范围: ...

  5. Levenberg-Marquardt(列文伯格-马夸尔特)算法

     什么是最优化? Levenberg-Marquardt算法是最优化算法中的一种.最优化是寻找使得函数值最小的参数向量.它的应用领域非常广泛,如:经济学.管理优化.网络分析 .最优设计.机械或电子 ...

  6. 高斯牛顿(Gauss Newton)、列文伯格-马夸尔特(Levenberg-Marquardt)最优化算法与VSLAM

    转载请说明出处:http://blog.csdn.net/zhubaohua_bupt/article/details/74973347 在VSLAM优化部分,我们多次谈到,构建一个关于待优化位姿的误 ...

  7. pythonslice_shift_Pandas 解决dataframe的一列进行向下顺移问题

    最近做比赛,有时候需要造出新的特征,而这次遇到的问题是将一列数据往下顺移一位.同时将开头缺失的那一个数据用其他方式填充. df['feature'].shift(1)向下顺移一位,这时第一位会置为na ...

  8. 接口文档下的渗透测试(Swagger)

    接口文档背景 随着前后端分离架构的优势越来越明显,前后端分离的应用场景也越来越广,如今前后端分离已成为互联网项目开发的业界标准使用方式,而为了前后端程序员在实际开发中能够有统一的接口文档去调试,因此也 ...

  9. python怎么让画笔向下移动_Pandas 解决dataframe的一列进行向下顺移问题

    最近做比赛,有时候需要造出新的特征,而这次遇到的问题是将一列数据往下顺移一位.同时将开头缺失的那一个数据用其他方式填充. df['feature'].shift(1)向下顺移一位,这时第一位会置为na ...

  10. excel整列动态联动下拉_在Excel下拉列表中显示多列

    excel整列动态联动下拉 A data validation drop down list in Excel only shows one column of items. See how to s ...

最新文章

  1. expert one on one oracle,数据库表——EXPERT ONE-ON-ONE ORACLE
  2. java socket wex5_WeX5集成ActiveMQ+WebSocket实现消息推送
  3. React Native 模仿网易云音乐手机客户端,兼容安卓和IOS两个平台
  4. Unity内置的三套消息发送机制的应用实例
  5. ueditor1_4_3_3编辑器的应用
  6. 两列布局左边定宽,右边自适应
  7. java utf-8字符表_Java中的ASCII、Unicode和UTF-8字符编码集
  8. 20172329 2017-2018-2 《程序设计与数据结构》实验一报告
  9. 监督学习 | 线性回归 之多元线性回归原理及Sklearn实现
  10. 漫步最优化四十二——Partan法
  11. c# mysql存储过程 输出参数值_MySQL 存储过程参数用法 in, out, inout
  12. JDK8新特性(一)之Lambda表达式
  13. 热门好用的空号检测API推荐
  14. 机房交换机网络测试软件,国内IDC机房带宽测试工具和方案
  15. SaaS(软件即服务)的魅力
  16. Java整合ORC识别验证码
  17. Element学习使用
  18. dubbo问题:forbid consumer报错
  19. Chrome中devtools安装
  20. myeclipse中生成web service时出现异常Unable to create JAXBContext

热门文章

  1. Vue播放m3u8视频格式的视频监控(适合移动端和pc端),用了Video.js,以及多视频列表循环播放代码,已测试,可播放
  2. Flarum 插件扩展 特定事件订阅插件Subscribed
  3. 极客时间《数据分析实战45讲 - 基础篇》学习笔记
  4. Win7电脑如何关闭智能卡服务功能--win10专业版
  5. 火车头采集的文件发布到服务器上,火车头采集器图片采集上传设置
  6. Unity3d FingerGestures
  7. 双拼输入法的原理及上手方法
  8. 如何集成支付宝到电脑网站
  9. php读取路由器arp表,详解ARP地址解析协议的工作流程
  10. 下行控制信息 - 下行DCI