第五个知识点 复杂性为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类是什么意思的更多相关文章

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

    Java反射机制demo(五)—获得并调用一个类中的方法 这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和 ...

  2. Python 五个知识点搞定作用域

    Python 五个知识点搞定作用域 1.块级作用域 想想此时运行下面的程序会有输出吗?执行会成功吗? #块级作用域 if 1 == 1: name = "lzl" print(na ...

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

    第五十个知识点:什么是BLS基于对的签名方案? BLS签名方案使用了椭圆曲线上了Weil对,本质上是一个在曲线上除n划分的双线性形式,使用 \(n^{th}\) 个单位根. 假设我们有一个椭圆曲线\( ...

  4. 第十五个知识点:RSA-OAEP和ECIES的密钥生成,加密和解密

    第十五个知识点:RSA-OAEP和ECIES的密钥生成,加密和解密 1.RSA-OAEP RSA-OAEP是RSA加密方案和OAEP填充方案的同时使用.现实世界中它们同时使用.(这里介绍的只是&quo ...

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

    第二十五个知识点:使用特殊的素数定义\(GF(p)\)和\(GF(2^n)\)的方法. 在我们之前看到的博客中,当实现密码学方案时,一个最频繁调用的操作就是模运算.不幸的是,尽管模块化的使用非常广泛, ...

  6. 第三十五个知识点:给针对ECDLP问题的Pollard rho,Pollard "Kangaroo",parallel Pollard rho攻击的一个粗略的描述

    第三十五个知识点:给针对ECDLP问题的Pollard rho,Pollard "Kangaroo",parallel Pollard rho攻击的一个粗略的描述 我们的目标是对任 ...

  7. 第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法

    第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法 原文地址:http://bristolcrypto.blogspot.com/2015/08/52-things-number-45-de ...

  8. Java入门篇(五)——Java的字符串/String类

    前面在举例时有出现过String的例子,当时肯定有一部分朋友不知道这个是做什么用的.其实String类是Java中一个比较特殊的类,字符串即String类,它不是Java的基本数据类型之一,但可以像基 ...

  9. CSS 基础知识点 样式 选择器 伪类

    CSS 基础知识点汇集 版权声明:这篇博客是别人写的,大神博客地址 : https://www.cnblogs.com/Mtime/p/5184685.html 1.CSS 简介 CSS 指层叠样式表 ...

随机推荐

  1. 大数据学习day32-----spark12-----1. sparkstreaming(1.1简介,1.2 sparkstreaming入门程序(统计单词个数,updateStageByKey的用法,1.3 SparkStreaming整合Kafka,1.4 SparkStreaming获取KafkaRDD的偏移量,并将偏移量写入kafka中)

    1. Spark Streaming 1.1 简介(来源:spark官网介绍) Spark Streaming是Spark Core API的扩展,其是支持可伸缩.高吞吐量.容错的实时数据流处理.Sp ...

  2. Oracle—表、约束、索引、表空间、分区、序列、统计信息

    表.约束.索引.表空间.分区.序列.统计信息 一.表及其操作 1.创建表 create table 表名 ( 字段名1 字段类型 默认值 是否为空 , 字段名2 字段类型 默认值 是否为空, 字段名3 ...

  3. 【Netty】最透彻的Netty原理架构解析

    这可能是目前最透彻的Netty原理架构解析 本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件.整体架构,知其然且知其所以然,希望给大家在实际开发实践.学习开源项目方面提供参考. ...

  4. Linux基础命令---ntpdate网络时间服务器

    ntpdate ntpdate指令通过轮询指定为服务器参数的网络时间协议(NTP)服务器来设置本地日期和时间,从而确定正确的时间. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS ...

  5. GO 总章

    GO 学习资源 go 代理 GO 语言结构 GO 数字运算 GO 时间处理 GO 定时器 GO 异常处理 go recover让崩溃的程序继续执行 GO Exit Fatal panic GO 通过进 ...

  6. [项目总结]关于调用系统照相机Activity被销毁问题解决

    在项目中需要启用系统照相机来拍照.本来很容易的一个问题.但在适配中出现了问题. 简单说一下问题: 有些手机拍照成功,有些手机拍完照后确定返回后activity数据丢失,被销毁了. 问题查找: 经过代码 ...

  7. FastDFS的理解和分析

    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线服务,如相 ...

  8. Mysql B-Tree和B+Tree索引

    Mysql B-Tree和B+树索引 Mysql加快数据查找使用B-Tree数据结构存储索引数据,InnoDB存储引擎实际使用B+Tree.下面首先介绍下B-Tree和B+Tree的区别: 一.B树和 ...

  9. 测试JDBCUtils的重用性

    package cn.itcast.jdbc;import cn.itcast.util.JDBCUtils;import java.sql.*;import java.util.Properties ...

  10. 访问Github速度很慢以及解决方法(系统通用)

    原因分析1,CDN,Content Distribute Network,可以直译成内容分发网络,CDN解决的是如何将数据快速可靠从源站传递到用户的问题.用户获取数据时,不需要直接从源站获取,通过CD ...