第五个知识点 复杂性为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 指层叠样式表 ...
随机推荐
- 一次线上GC故障解决过程记录
排查了三四个小时,终于解决了这个GC问题,记录解决过程于此,希望对大家有所帮助.本文假定读者已具备基本的GC常识和JVM调优知识,关于JVM调优工具使用可以查看我在同一分类下的另一篇文章: http: ...
- 学习java的第十七天
一.今日收获 1.java完全学习手册第三章算法的3.1比较值 2.看哔哩哔哩上的教学视频 二.今日问题 1.在第一个最大值程序运行时经常报错. 2.哔哩哔哩教学视频的一些术语不太理解,还需要了解 三 ...
- Can we use function on left side of an expression in C and C++?
In C, it might not be possible to have function names on left side of an expression, but it's possib ...
- promise ,async 小记
Promise Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及该异步操作的结果值. 摇色子游戏,随机1-6的一个整数,并且将其返回. function fn() { retur ...
- EntityFramework Core (一)记一次 .net core 使用 ef 6
使用传统的sql去操作数据库虽然思路更加清晰,对每一步数据库读写操作都能监控到,但是对大数据存储,或存储规则复杂的程序就需要编写大量的SQL语句且不易维护..orm大大方便了复杂的数据库读写操作, 让 ...
- Springboot整合MongoDB(Eclipse版本)
IDEA版本其实也差不多的,大同小异 简单Demo地址: https://blog.csdn.net/shirukai/article/details/82152243 Springboot项目整合M ...
- MM函数(Excel函数集团)
此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业!谢谢 下载地址:https://officecommunity-m ...
- CF125A Measuring Lengths in Baden 题解
Content 在 Baden,一英寸等于 \(3\) 厘米,一英尺等于 \(12\) 英寸. 现在有一个 \(n\) 厘米的物体,求在 Baden,它是几英尺又几英寸. 数据范围:\(1\leqsl ...
- CF1501A Alexey and Train 题解
Content 一列火车从 \(0\) 时刻开始从 \(1\) 号站出发,要经过 \(n\) 个站,第 \(i\) 个站的期望到达时间和离开时间分别为 \(a_i\) 和 \(b_i\),并且还有一个 ...
- java 多线程Thread 子类 定时器Timer
定时器Timer, 定时器分类: 1,指定时间指定任务(明天早上8点准时提醒我起床),相当于linux里面的at命令 2,周期性的执行任务(每隔三分钟闹钟响一次),相当于Linux里面的cron命令 ...