这个是密码学52件事第四篇,和理论密码学的第一篇。在这篇中我被要求定义P类复杂问题。我对计算理论科学知道的非常少当我开始我的PhD,而且我确信很多人和我一样。因此这篇文章从最简单的开始,如果你已经会了你可以跳过前面的部分。首先我会描述复杂性的定义和为什么他很重要,然后我们定义图灵机,最后是P类复杂问题,通过一个例子做总结。

这篇文章主要的内容就是重写Introduction to the Theory of Computation by Michael Sipser[1],我觉得他对我真的很重要。

Section 1: Complexity and Big O Notation
为了设计高效的程序,我们想知道计算机执行给定任务有多难。问题在于,计算机的处理能力因硬件而异(例如,参考上周的52件事)。所以我们想要一个不依赖与执行任务的机器的具体细节的任务难度的度量。其中一种方法就是限定一个特定型号的计算机执行操作所需要的操作数。这就是所谓的(时间)复杂性理论。

不过操作的数量取决于任务的输入,甚至输入长度相同操作数都不相同。举个栗子,假设我们设计一个程序来判断你的输入整数是不是质数。如果我们输入256,程序可能判断的比输入323更快。尽管它们的长度都是9.因为第一个数字的2就是它的一个因数,第二个有更大的因数。因此我们通常给出一个最坏时间复杂的分析,当我们记录实际的运行长度的时候。因此我们获得了一个t(n)的表达式。反应了所有输入的最长运行时间。

而且,当输入的长度n非常大的时候,我们能够忽略表达式中除了最大项的项,也可以忽略任何实例的系数。这被叫做渐进分析。我们假设n是非常大的,并且询问当给定最差的n的时候。计算模型需要多少步能完成,然后我们把答案写成O(t(n))。例如,如果我们发现需要 6n3-n2+1步。我们写做O(n^3),因为所有的项都能被忽略。

Section 2:Turing Machines 图灵机
如今我们给出这个第一节当中最经常被用的模型。首先,要明白一个字母表是一个非空有穷集。一个字符串是一个从字母表的符号序列。一个语言是字符串集的一部分。

图灵机模型就是真实的计算机。它的内存就是一个有限长度的纸条。任何时候,纸条的每一块要么是空的要么是包含了字符表的中的字符。这个机器有一个读写头能够每次在纸带上向左向右移动,或者在纸带上进行读写。在机器运行的开始,纸带最左边n个都是输入,剩下的都是空白的。(输入中没有空白的,这样可以确定输入结束的位置)。磁带头从最左边的正方形开始,读取一个输入符号,然后根据转换函数决定下一步要做什么。转换函数取决于它当前所读取的内容,和机器当前的状态。和返回:

  • 一个新的状态
  • 另一个写入的符号(可能跟之前的相同)
  • 一个移动的方向(左或者右)
  • 这个机器持续的运行,读符号,计算转换函数,写符号,移动,直到进入接受状态或者拒绝状态。

如果机器在一个接受状态结束的话,我们说它接受了输入。但是注意:它可能进入一个循环没有接收也没有拒绝。例如,它可能从不挂起。如果一个图灵机接受一些语言的每个字符串和拒绝其它字符串,我们就说这个机器判定了这种语言。我们把这个过程看作机器测试这个输入字符串是否是这个语言的一部分。给定一个语言,如果有一个图灵机可以判定它,那么我们就说这个语言是可判定的。

这个模型的厉害就是一个图灵机能做现代计算机所有的事情(被叫做Church-Turing论断)。我们定义时间复杂类TIME(t(n))这样的一类就是所有的能够被时间复杂度为O(t(n))的图灵所能判定的,然后我们就能把计算问题变成一个语言关系问题(输入字符串是某种语言的成员吗?这个表示整数的字符串属于表示素数整数的字符串语言吗?),同时可以将计算问题分类变成时间复杂度类。

Section 3: P类复杂问题
最终,我们终于到达了这个问题!如果t(n)=nk对一些k>0,同时O(t(n))被叫做多项式时间.P类复杂度问题就是那些图灵机可以在O(t(n))时间内可判定的语言。因为k可能非常大,图灵机可能运行的非常慢。但是这个类是给粗略的模型,描述了计算机可以实现的功能。注意t(n)比如2n这样时间的语言类与P类是完全不同的,增长速度如此之快,即使你对某些语言有一个决定,你可能会发现宇宙在你输入之前就结束了!

我们用一个多项式时间的问题做一个例子。假设你有一个单向图(一组点和边,每两个点之间最多有一条边,每个边有一个箭头表示方向)。如果我们编码这个图,把两个节点当做一个单一字符串。我们可以形成一种由表示图形的字符串和两个节点组成的语言,这样就可以沿着第一个节点的边走,最终到达第二个节点。因此这个语言会有效率的回答是否有一个从节点A到节点B的路径,这就是路径问题,通过接受或者拒绝你输入的图或者节点。我们给出这样的决策器,它能够在多项式时间内判定这个问题。

  • 首先在A上做一个标记
  • 扫描图的所有边。如果你发现一个边从标记过的节点指向未标记的节点,标记这个未被标记的节点
  • 重复上述操作,直到没有标记新节点
  • 如果B被标记了,接受,否则,拒绝

这个过程成功的标记了到A距离为1的所有节点,距离为2的所有节点。因此图灵机显然可以实现上面的过程。现在我们考虑这个时间复杂度。步骤1和步骤4太容易了。所以我们集中注意力在步骤2和步骤3,步骤2包括了搜索输入和在一个位置上放上标记,这个过程明显是多项式时间内可以完成的。步骤3重复步骤2的次数不多于节点的数量,节点的数量肯定少于输入的数量,因此这也是线性的。因此整个算法就是线性的。我们说这个路径问题就是P类问题。

[1] http://www.amazon.co.uk/Introduction-Theory-Computation-Michael-Sipser/dp/0619217642

[2] http://en.wikipedia.org/wiki/Church–Turing_thesis

原文地址:http://bristolcrypto.blogspot.com/2014/10/52-things-number-4-complexity-class-p.html
转载地址:https://www.cnblogs.com/zhuowangy2k/p/11517655.html

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第4篇] P类复杂问题相关推荐

  1. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第14篇]什么是基于线性对的密码学

    这是最新的一期密码学52件事.我们基于前几周介绍一种"对"的概念. 对的定义 给定三个循环群G1,G2,G3,它们的基为q,生成器分别为g1,g2,g3.我们说一个函数e:G1×G ...

  2. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第51篇]什么是基于ID的加密的安全模型,描述一个IBE方案

    在公钥密码学中,如果Alice想要给Bob发送一条消息,她需要Bob的公钥,一般来说公钥都很长,就像一个随机的字符串. 假设Alice可以不用公钥而是使用Bob的名字或者邮件地址作为他的公钥.实际的来 ...

  3. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第34篇]描述攻击离散对数问题的baby-step/Giant-step方法

    这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. Baby-step/Giant ...

  4. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第39篇]侧信道攻击和故障攻击有什么区别

    这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. 侧信道攻击(Side-chan ...

  5. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第32篇]基于博弈的证明和基于模拟的证明

    这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. 在基于博弈的安全定义中,安全是 ...

  6. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第31篇]Game Hopping证明

    这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. 关于安全证明, 目前主流的方法 ...

  7. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第30篇]大致简述密钥协商中的BR安全定义

    这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. 在两方之间建密钥共享是一件密码 ...

  8. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第25篇]使用特殊的素数定义GF(p)和GF(2^n)的方法

    这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. 当实现密码学方案时,一个最频繁 ...

  9. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第22篇]如何用蒙哥马利算法表示一个数字和多个相乘的数字

    这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. 安全和效率 密码学的目标是设计 ...

  10. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第16篇]描述DSA、Schnorr和RSA-FDH的密钥生成、签名和验证算法。

    这是一系列博客文章中最新的一篇,文章的主题是"做密码学每个博士生都应该知道的52件事".这一系列问题是为了让博士生们在第一年结束时了解他们应该知道的事情.本周我们将介绍DSA.Sc ...

最新文章

  1. 计算机英语 自我介绍,计算机面试英文自我介绍范例
  2. 【啊哈!算法】之二、插入排序
  3. ssl1763-观光旅游【最小环,Floyd,dijkstra】
  4. 一个基于Bmob的OPPO锁屏壁纸小程序,写过之后发现...好像没什么卵用...一脸懵逼
  5. suse12安装详解
  6. 从618大促聊聊华为云GaussDB NoSQL的蓬勃张力
  7. 杰出人士的34个好习惯
  8. 枚举类型转换成字符串
  9. dosbox edit.exe 如何使用_微软软件如何激活?这个神器分享给你!
  10. java echarts 散点图_echarts在地图上绘制散点图(任意点)
  11. 好书推荐|《CSS新世界》,前端人员必备宝书!
  12. 人力资源管理系统(大二数据库课设) spring boot,Mybatis+bootstap,ajax项目
  13. 堆积木——GBQ4.0设置“统一设置安装费用”中的“高层建筑增加费”
  14. Excel 合并居中后无法自动换行
  15. Android下拉快捷设置面板添加快捷开关流程
  16. 教你如何用Canvas绘制整身的哆啦A梦
  17. MEDLINE与PubMed有什么区别?检索范围包含哪些?
  18. 第二章:关系数据库 - 04735数据库系统原理 - 自考知识点
  19. Vue项目在ie浏览器打不开的解决办法
  20. 剑指 Offer II 080. 含有 k 个元素的组合

热门文章

  1. 用java创建UDF,并用于Hive
  2. verycd重整——CBT系列
  3. 阿里云ESC服务器数据快速转移至轻量应用服务器
  4. 用计算机打出二分之一,win10手机计算器怎么输入二分之一?
  5. redis将散裂中某个值自增_0基础掌握Django框架(49)Redis
  6. 使用Oracle做定时任务
  7. es elasticsearch 几种常见查询场景 二次分组 java读取es的查询json文件
  8. 由excel导出引起的cpu 100% 和gc 的问题
  9. 关于java开发中的实用工具Hutool工具类
  10. 采用计算机辅助电话调查,计算机辅助电话调查(CATI)-实验.pdf