原文地址:http://bristolcrypto.blogspot.com/2014/11/52-things-number-5-what-is-meant-by.htmlhtml
这是52个密码学知识点的第五篇。咱们继续关于NP的复杂性理论部分。算法
上周,Ryan给咱们介绍了P类复杂问题的定义:安全
这周咱们介绍另外一个复杂类:oracle
NDTM就是一种转换函数有多个返回值的图灵机。(实际上这不是一个转换函数,咱们能够叫它一个转换关系)所以NDTM对输入看起来就像一颗树。在每一个分支节点上都提供了多个可能的值(子节点).NDTM接收这个输入当且仅当树中至少有一个分支的输入处于接收状态。这个定义从语言关系到决策到计算问题的方法和上周定义P的时候同样。函数
咱们以一个简单的例子开始:路径查找。给一个有向图(n个节点) 是否有从点A到点B的路径。咱们怎么在NP类中获得答案?好的,存在一个NDTM能解决它,十分简单,只要尝试全部的路线,只要有一个分支那么就有一个交叉点,若是一个分支到达了B那么该分支将终止于accept状态。任意一条分支在遍历n步以后自动结束并处于拒绝状态。(由于任何路径最多包含n-1条边,因此将检测到任何有效的路径,所以这台机器将正确的决定是否存在这样的一个路径)。spa
一个NP问题的重要的例子就是可知足行问题:htm
例如,在表达式\((A\lor B )\land(A \lor \neg B)\)是可知足的。由于有一个合法的赋值\(A=B=True\)。注意:在标准形式中,这是个决定性问题,即咱们只须要知道存不存在,不须要找到。blog
首先,咱们知道\(P \subseteq NP\) 由于DTM是一种NDTM(显而易见)。所以实际上咱们的问题就是咱们能不能找到一件咱们能用NP作的问题可是咱们没办法用P完成?这就是\(P=NP\)问题,这是一个开放问题。固然咱们也发现了NP中已知可是P中未知的问题,也许在将来的研究中这些问题能被P解决。ip
不少有趣的密码系统(特别是在公钥中)都是基于计算问题是"困难"的假设而是安全的,这意味着至少与NP中的任何问题同样困难。也就是说,不少方案都是基于咱们认为难的问题,若是你能建立一个算法来解决这些问题,你也能够用这个算法解决其余当前认为是难的问题。get
Cook-Levin定理提供了一个有趣的证实思路。没有NP问题是比SAT难的(已经有证实了SAT是最难的NP问题(,即NP彻底问题)。这就是说若是咱们有一个oracle(就是一个问询,一个有输入输出的算法)能解决SAT问题,经过问这个oracle几个被构造的问题,也能够解决任何其它NP问题。这让SAT成为了第一个NP彻底问题的例子。所以为了证实问题X至少和解决NP问题同样难(NP难问题),若是咱们能解决X问题,那么咱们就能解决SAT问题。