第五个知识点 复杂性为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问题。

原文地址:https://www.cnblogs.com/zhuowangy2k/p/11518651.html

时间: 2024-10-12 20:20:02

第五个知识点 复杂性为NP类是什么意思的相关文章

《javascript高级程序设计》第五章知识点总结

第五章知识点总结 1.object类型 访问对象的方法:①点表示法        (people.name) :      ②方括号表示法         (people[name]). 常用方法:hasOwnProperty()         用于检查给定属性在当前对象实例中是否存在 isPrototypeOf()              用于检测传入的对象是否传入对象原型 toString()                        返回对象的字符串表示 valueOf()    

第二十五个知识点:使用特殊的素数定义$GF(p)$和$GF(2^n)$的方法。

第二十五个知识点:使用特殊的素数定义\(GF(p)\)和\(GF(2^n)\)的方法. 在我们之前看到的博客中,当实现密码学方案时,一个最频繁调用的操作就是模运算.不幸的是,尽管模块化的使用非常广泛,但是它不能像其它算术运算(如加法和乘法)那样容易的执行.蒙哥马利表达提供了一种解决方案,这里我们讨论另一种解决方法--伪梅森素数规约. 定义:如果一个素数\(p\)被写成如下形式,那么就称\(p\)位伪梅森素数.其中\(b=2,c=1\)时就是梅森素数. \[ P = b^n-c,其中0<|c|<

第五十个知识点:什么是BLS基于对的签名方案?

第五十个知识点:什么是BLS基于对的签名方案? BLS签名方案使用了椭圆曲线上了Weil对,本质上是一个在曲线上除n划分的双线性形式,使用 \(n^{th}\) 个单位根. 假设我们有一个椭圆曲线\(E/F_{3^l}\),根据原始论文中的记号,方案如下描述: 密钥生成:让\(E/F_{3^l}\)是一个椭圆曲线,\(q\)是这个曲线阶数的最大因数.让\(P\)是其中的一个阶数是\(q\)的点,然后随机的选择\(x \in Z_q^*\).最后让\(R = x \cdot P\).那么输出\((

Android实战简易教程-第五十八枪(AlarmManager类用法研究小实例)

一.概念及相关方法 android中实现定时任务一般有两种实现方式,一种是使用Java API中提供的Timer类,一种是使用android的Alarm机制.Timer机制有个短板就是不太适用于那些需要长期在后台运行的任务,我们都知道为了让电池更加耐用,会在长时间不操作手机的情况下,CPU进入休眠状态,这是可能导致Timer中的定时任务无法正确运行.所以我们重点来研究一下Alarm机制. AlarmManager,顾名思义,就是"提醒",是Android中常用的一种系统级别的提示服务,

WEB前端开发 必会的二十五个知识点

1. 常用那几种浏览器测试?有哪些内核(Layout Engine)?(Q1) 浏览器:IE,Chrome,FireFox,Safari,Opera.(Q2) 内核:Trident,Gecko,Presto,Webkit. 2. 说下行内元素和块级元素的区别?行内块元素的兼容性使用?(IE8 以下)(Q1) 行内元素:会在水平方向排列,不能包含块级元素,设置width无效,height无效(可以设置line-height),margin上下无效,padding上下无效. 块级元素:各占据一行,垂

IOS基础之 (十五)知识点

一 SEL 1. 方法的存储位置 每个类的方法地址列表都存储在类对象中. 每个方法都有一个与之对应的SEL类型的对象. 根据一个SEL对象就可以找到方法的地址,进而调用方法. Person.h 1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObject 4 5 + (void) test1; 6 7 - (void) test2; 8 9 - (void )test3:(NSString *) abc; 10 11

JAVA学习笔记(五十一)- DBUtil 封装数据库工具类

数据库工具类 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /* * 数据库工具类 */ public class DBUtil { // 获取数据库连接 public static Connection getConnection() { String dr

Java反射机制demo(五)—获得并调用一个类中的方法

这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和运行结果.获取所有的方法使用Class类中getMethos()方法. 待获取的类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 package

ExtJs4学习(五)最基本的Ext类

Ext类是ExtJs中最常见.最基础的一个类,它是一个全局对象,封装了所有类.单例和 Sencha 库所提供的实用方法. 大多数用户界面组件在一个较低的层次嵌套在命名空间中, 但是提供的许多常见的实用函数作为 Ext 命名空间的直接属性. 此外提供许多常用的方法,从其他类作为 Ext 命名空间内的快捷方式. 例如 Ext.getCmp 就是 Ext.ComponentManager.get 的别名. 一旦DOM准备好,许多应用程序启动,调用Ext.onReady. 这可以确保已加载所有脚本, 防