第五个知识点 复杂性为NP类是什么意思
第五个知识点 复杂性为NP类是什么意思
原文地址:http://bristolcrypto.blogspot.com/2014/11/52-things-number-5-what-is-meant-by.html
这是52个密码学知识点的第五篇。我们继续关于NP的复杂性理论部分。
上周,Ryan给我们介绍了P类复杂问题的定义:
- P 就是一类能被确定的图灵机在有限时间内判定的语言。
这周我们介绍另一个复杂类:
- NP就是一类能被非确定的图灵机在有限时间内判定的语言。
什么是非确定的图灵机(NDTM)
NDTM就是一种转换函数有多个返回值的图灵机。(实际上这不是一个转换函数,我们可以叫它一个转换关系)因此NDTM对输入看起来就像一颗树。在每个分支节点上都提供了多个可能的值(子节点).NDTM接收这个输入当且仅当树中至少有一个分支的输入处于接收状态。这个定义从语言关系到决策到计算问题的方法和上周定义P的时候一样。
一些NP问题的例子
我们以一个简单的例子开始:路径查找。给一个有向图(n个节点) 是否有从点A到点B的路径。我们怎么在NP类中得到答案?好的,存在一个NDTM能解决它,十分简单,只要尝试所有的路线,只要有一个分支那么就有一个交叉点,如果一个分支到达了B那么该分支将终止于accept状态。任意一条分支在遍历n步之后自动结束并处于拒绝状态。(因为任何路径最多包含n-1条边,所以将检测到任何有效的路径,因此这台机器将正确的决定是否存在这样的一个路径)。
一个NP问题的重要的例子就是可满足行问题:
- SAT问题:给n个变量一个表达式(与或非表达式),是否有一个变量的赋值能使得表达式为True?
例如,在表达式\((A\lor B )\land(A \lor \neg B)\)是可满足的。因为有一个合法的赋值\(A=B=True\)。注意:在标准形式中,这是个决定性问题,即我们只需要知道存不存在,不需要找到。
所以有很多NP问题.NP问题的价值在哪
首先,我们知道\(P \subseteq NP\) 因为DTM是一种NDTM(显而易见)。因此实际上我们的问题就是我们能不能找到一件我们能用NP做的问题但是我们没办法用P完成?这就是\(P=NP\)问题,这是一个开放问题。当然我们也发现了NP中已知但是P中未知的问题,也许在未来的研究中这些问题能被P解决。
很多有趣的密码系统(特别是在公钥中)都是基于计算问题是"困难"的假设而是安全的,这意味着至少与NP中的任何问题一样困难。也就是说,很多方案都是基于我们认为难的问题,如果你能创建一个算法来解决这些问题,你也可以用这个算法解决其他当前认为是难的问题。
Cook-Levin定理提供了一个有趣的证明思路。没有NP问题是比SAT难的(已经有证明了SAT是最难的NP问题(,即NP完全问题)。这就是说如果我们有一个oracle(就是一个问询,一个有输入输出的算法)能解决SAT问题,通过问这个oracle几个被构造的问题,也可以解决任何其它NP问题。这让SAT成为了第一个NP完全问题的例子。因此为了证明问题X至少和解决NP问题一样难(NP难问题),如果我们能解决X问题,那么我们就能解决SAT问题。
第五个知识点 复杂性为NP类是什么意思的更多相关文章
- Java反射机制demo(五)—获得并调用一个类中的方法
Java反射机制demo(五)—获得并调用一个类中的方法 这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和 ...
- Python 五个知识点搞定作用域
Python 五个知识点搞定作用域 1.块级作用域 想想此时运行下面的程序会有输出吗?执行会成功吗? #块级作用域 if 1 == 1: name = "lzl" print(na ...
- 第五十个知识点:什么是BLS基于对的签名方案?
第五十个知识点:什么是BLS基于对的签名方案? BLS签名方案使用了椭圆曲线上了Weil对,本质上是一个在曲线上除n划分的双线性形式,使用 \(n^{th}\) 个单位根. 假设我们有一个椭圆曲线\( ...
- 第十五个知识点:RSA-OAEP和ECIES的密钥生成,加密和解密
第十五个知识点:RSA-OAEP和ECIES的密钥生成,加密和解密 1.RSA-OAEP RSA-OAEP是RSA加密方案和OAEP填充方案的同时使用.现实世界中它们同时使用.(这里介绍的只是&quo ...
- 第二十五个知识点:使用特殊的素数定义$GF(p)$和$GF(2^n)$的方法。
第二十五个知识点:使用特殊的素数定义\(GF(p)\)和\(GF(2^n)\)的方法. 在我们之前看到的博客中,当实现密码学方案时,一个最频繁调用的操作就是模运算.不幸的是,尽管模块化的使用非常广泛, ...
- 第三十五个知识点:给针对ECDLP问题的Pollard rho,Pollard "Kangaroo",parallel Pollard rho攻击的一个粗略的描述
第三十五个知识点:给针对ECDLP问题的Pollard rho,Pollard "Kangaroo",parallel Pollard rho攻击的一个粗略的描述 我们的目标是对任 ...
- 第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法
第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法 原文地址:http://bristolcrypto.blogspot.com/2015/08/52-things-number-45-de ...
- Java入门篇(五)——Java的字符串/String类
前面在举例时有出现过String的例子,当时肯定有一部分朋友不知道这个是做什么用的.其实String类是Java中一个比较特殊的类,字符串即String类,它不是Java的基本数据类型之一,但可以像基 ...
- CSS 基础知识点 样式 选择器 伪类
CSS 基础知识点汇集 版权声明:这篇博客是别人写的,大神博客地址 : https://www.cnblogs.com/Mtime/p/5184685.html 1.CSS 简介 CSS 指层叠样式表 ...
随机推荐
- 文件和目录之间建立链接 (ln)
- angular中路由跳转并传值四种方式
一.路由传值 步骤1 路由传递参数 注意 一定是要传递 索引值 let key = index 这种情况是在浏览器中可以显示对应的参数 这种的是问号 localhost:8080/news?id=2& ...
- 关于浏览器,从输入URL到呈现页面过程!(主讲TCP/IP协议)
一.文本对话--从请求到响应 我们在浏览器中输入一个 URL,回车之后便会在浏览器中观察到页面内容.实际上这个过程是: (1)浏览器向网站所在的服务器发送了一个 Request(请求) (2)网站服务 ...
- RB-Tree深度探索
关联式容器就是通过key值来寻找value,这个和数据库很相像,为了提升查找效率,因此关联式容器底层大多数用红黑树或哈希表来实现. 红黑树是高度平衡的二叉树,它也被称为平衡二元搜索树. 如上所示,正常 ...
- 节省内存的循环banner(一)
循环banner是指scrollview首尾相连,循环播放的效果,使用非常广泛.例如淘宝的广告栏等. 如果是简单的做法可以把所有要显示的图片全部放进一个数组里,创建相同个数的图片视图来显示图片.这样的 ...
- redis入门到精通系列(四):Jedis--使用java操作redis详解
(一)前言 如果不把数据库和后端语言联系起来,就起不到数据库应该要起到的作用.Java语言通过JDBC操作mysql,用Jedis操作redis.当然了,java操作redis的方式不止jedis一种 ...
- bugku 杂项 流量分析(cnss)
bugku 杂项 流量分析(cnss) 此题较为简单 wireshark 追踪第一行tcp流信息 得到如下 GET /stat.htm?id=2724999&r=http%3A%2F%2Fsp ...
- [云原生]Docker - 容器
目录 Docker容器 启动容器 新建并启动 启动已终止容器 守护态运行容器 终止容器 进入容器 attach命令 exec命令 导出和导入容器 导出容器 导入容器 删除容器 Docker容器 容器是 ...
- 有了代码变更分解提交工具SmartCommit,再也不担心复合提交了
摘要:文将介绍一个代码提交辅助工具SmartCommit,其主要功能是通过杂糅变更分解算法自动生成分组提交方案,接受开发者的反馈和交互式调整,渐进式地引导和辅助开发者做出符合最佳实践的原子提交. 本文 ...
- [BUUCTF]PWN——ez_pz_hackover_2016
ez_pz_hackover_2016 题目附件 解题步骤: 例行检查,32位,开启了RELRO保护,二进制的保护机制看这里 由于没有开启nx保护,对于这题一开始想到的是利用写入shellcode来获 ...