什么是可计算理论

【计算机系统基础01】冯·诺依曼结构及其主要思想 冯·诺依曼结构的主要思想:1、计算机应由运算器、控制器、存储器、输入输出设备五个基本部件组成存储器不仅存放数据,而且还可以存放指令,形式上两者没有区别(都是01序列),但计算机应能区分数据还是指令控制器应能自动取出指令来执行运算器应能进行加/减/乘/除四种基本运算,并且能进行一些逻辑运算和附加运算操作人员可通过输入输出设备和主机进行通信3、内部以二进制表示指令和数据(ENIAC是十进制表示指令和数据,而IAS计算机采用的是二进制),每条指令由操作码和地址码两部分组成。......... 阅读详情

转载:http://blog.youkuaiyun.com/zyearn/article/details/9196797

这个学期刚好上这门课,此课绝对是CS课程中的神课,需要一定的决心和耐心才能啃下来。这篇文章可以说是一篇科普文,争求通俗易懂。


可计算理论是计算理论的一个分支,还有两个分支分别是自动机和计算复杂性。

这些名词都顾名思义,自动机讲的是计算的模型,比如图灵机,它是由无限长磁带,读写磁头和一些状态转移序列组成;可计算理论,研究的是一个函数(或程序)是不是能被计算,但是什么叫能被计算呢,比如说给定x,你给我计算出2x,这个函数就是可计算的,那又有什么函数是不可计算的呢?稍后你会看到著名的停机问题,这个程序就是不可计算的;计算复杂性研究的是如何有效地解决问题。

这刚好是计算的三个方面:计算的模型,计算的界限,计算的代价。

现在让我们关注可计算性这个方面。

什么是可计算函数?

如果存在一段程序来计算一个函数,那么这个函数就是可计算的。通俗来讲,你能用编程语言写出来并运行的都是可计算函数,更通俗来讲,你写完程序,在windows下会生成一个exe执行文件,假设打开后会提示你给一个程序的输入,这个程序根据这个输入能计算出相应的结果,可以把这个程序看为一个函数,给定x,输出f(x)。以后你每次想计算f(x),只要运行相同的程序就可以了。处理一类问题有相同的算法,这样的函数叫可计算函数。比如给x,输出x^2+6,就是可计算的。

这里需要把程序P和函数f的概念说清楚。如果一个程序P的效果可以和一个函数f的效果一样,也就是说给定x,P(x)=f(x),我们就说P能够计算f。但是他们不是一一对应的关系,即多个程序可以对应同一个f。比如说给定x,输出2x,函数f是唯一确定的,即f(x)=2x,但程序不是确定的,比如我可以给每个程序最后加个不相关赋值语句,程序的输出是不变的,但每个程序都是不一样的。

什么是不可计算函数?

考虑这样一个问题:是否存在一个程序,它能够计算任何程序在给定输入下是否会运行结束?
答案是不存在。这就是著名的停机问题。
现在让我们来证明一下,证明思想相当精妙和精简。
假设这样的函数存在,设为halt(char* program, char* input),那么这个函数编写出来就是这样的:
[cpp]  view plain copy
  1. bool halt(char* program, char* input)  
  2. {  
  3.     if(<program> halts on <input>)  
  4.         return true;  
  5.     else  
  6.         return false;  
  7. }  

然后我们考虑这样一个函数,这个函数就像它的程序名一样那么邪恶:
[cpp]  view plain copy
  1. void Evil(char *p)  
  2. {  
  3.     if(halt(p,p))  
  4.         while(1);   //forever loop  
  5.     else  
  6.         return;  
  7. }  

然后我们考虑Evil(Evil)是否会停机(即Evil这个程序的输入是它本身)。

如果Evil(Evil)会停机,那么必然执行的是else语句里的return,那么if的判定条件为false,那么halt(Evil,Evil)必返回false,即Evil程序不会在Evil输入上停机,而假设是会停机,矛盾。

如果Evil(Evil)不会停机,那么必然执行的if语句里的死循环,所以if的判定条件为true,那么halt(Evil,Evil)必返回true,即Evil程序会在Evil输入上停机, 而假设是不会停机,矛盾。

所以它停也矛盾,不停也矛盾,于是得出halt(char* program, char* input)这个函数是不存在的。

实际上还有很多函数都是不可计算的。比如,
不存在一个程序,它能够判断任何程序是否是0函数。(0函数就是说对于所有输入输出都是0)。
不存在一个程序,它能够判断任意两个程序是否计算同样的f。

那么是否有一个比较系统的方法来判断哪些函数是不可计算的呢?答案是有的,这就是著名的Rice's Theorem。这个定理说的是,有一个函数集合B(即这个集合B是函数f的集合),并且B不是空集,也不是全部函数f,那么程序P是否属于B是不可计算的。

什么意思呢,举个形象的例子。比如说你是程序设计这门课的助教。你布置了一个作业,要求学生写一个程序,任意给定x,输出2x。学生马上写完交给你了,你惊奇地发现这门课竟然有200名学生,然后一个偷懒的想法在你脑中诞生了:我是不是能写一个程序,来自动判断学生上交的程序是否满足要求呢?Rice‘s theorem打破了你的幻想,这样的程序是不存在的。

这个例子中,令B包含f(x)=2x这个函数,助教想做的是判断一个程序是否属于这个集合B,Rice‘s theorem告诉我们这样的程序不存在。

除了研究函数的可计算性,可计算理论还关注什么?

实际上,这门课包含的内容远远不止上文这些东西。还有一些很重要的概念,比如:
1. 康托提出的对角线方法;
2. 哥德尔不完备定理也可以通过这门课的后续内容推导出来;
3. 归约的思想,问题难度的划分。
4. 第一和第二递归定理。
这些都是相当美妙,计算理论里相当关注的问题。

本文不可能全部介绍这些概念,如果你有兴趣,请参考Nigel Gutland写的《An introduction to recursive function theory》,写得算比较详细了。

至此,你应该懂了什么是停机问题,什么是可计算函数,什么是不可计算的,作为科普,这些就够了。计算理论本身就是需要钻研才能明白的学科。

这门课可能对找工作的人没有太大帮助,但是它让人体会到了美和伟大。


参考资料:
[1] 《An introduction to recursive function theory》. Nigel Gutland
[3] 《暗时间》 刘未鹏

【计算理论】【《计算理论导引(原书第3版)》笔记】第一章:正则语言 阅读详情

相关推荐

计算:第三部分 计算理论的形成 第 8 章 计算理论的诞生:图灵的可计算数 可计算数

1. 背景介绍 计算理论是计算机科学的一个重要分支,它研究计算的本质和极限。在计算理论的发展历程中,图灵的可计算数理论是一个里程碑式的事件。这个理论提出了一个重要的概念——可计算数,它对计算机科学的发展产生了深远的影响。 2. 核心概念与联系 在介绍可计算数之前,我们需要先了解一些相关的概

AI天才研究院 1012

周志华《Machine Learning》学习笔记(14)--计算学习理论

上篇主要介绍了常用的特征选择方法及稀疏学习。分别介绍了子集搜索与评价、过滤式、包裹式以及嵌入式四种类型的特征选择方法:子集搜索与评价是一种优中生优的贪婪算法;过滤式计算相关统计量来评判特征的重要程度;包裹式将学习器作为特征选择的评价准则;嵌入式则是通过L1正则项将特征选择融入到学习器参数优化的过程中,最后介绍了稀疏表示与压缩感知的思想。本篇将讨论一种为机器学习提供理论保证的学习方法--计算学习理论。

VAY-长跑 6268

5、可计算性理论基础详解

本文深入探讨了可计算性理论的基础概念,涵盖图灵机的定义与形式化、有效枚举与通用机器、可计算枚举集与可计算集的性质、停机问题的不可判定性、半可计算函数以及计算复杂性理论。通过详细分析图灵论题、s-m-n定理、递归定理和算术层次结构等核心内容,并结合练习实例,全面展示了可计算性在计算机科学中的理论边界与应用价值。文章还介绍了NP完全性、多项式层次结构及Busy Beaver函数等重要课题,为理解计算的本质和极限提供了坚实基础。

tgb345678的博客 110

可计算理论简介

在60年代的中国,如果一个大学生不懂工农业常识,例如混淆了韭菜麦子,可能会受到讥笑。本来,闻道有先后,树业有专工。要求一个领域的人理解另一个领域的知识是有些过分。在今天,如果一个计算机科学的硕士或博士不知道什么是不可判定问题,什么是停机问题,为什么停机问题不可解,什么是NP=?P问题,也有可能会受到讥笑。因为这些问题对于计算机科学而言,太基本、太重要了,它们都属于一门称为可计算理论的学科。是计算机

mentat的专栏 4429

递归函数与可计算性理论

文章标题 递归函数与可计算性理论 关键词:递归函数、可计算性、算法、性能优化、递归神经网络、动态规划 摘要: 本文章详细探讨了递归函数的概念、基础、应用、性能优化、数学原理、计算机

AI天才研究院 1369

探索计算极限:《可计算性理论》全面解析

可计算性理论是计算机科学的一个基础分支,它研究哪些问题是可计算的,以及如何通过抽象的计算模型来实现计算。在探讨可计算性时,图灵机的概念扮演着至关重要的角色。图灵机是由英国数学家和逻辑学家艾伦·图灵在20世纪30年代提出的一种理想化的计算模型,它简化了计算过程,并且为理解什么是算法以及如何计算提供了一个清晰的框架。在计算机科学领域中,停机问题(Halting Problem)是指判断一个算法或程序对于给定的输入是否会停止运行并给出结果,还是无限运行下去的一个问题。

weixin_42601547的博客 1188

停机问题:算法的极限边界

可计算性理论为理解计算的本质提供了基础框架。通过图灵机的模型,我们能够定义可计算性和不可计算性,理解哪些问题可以通过算法解决,哪些问题是无法解决的。可计算性理论不仅在理论计算机科学中占有重要地位,也在实际应用中,如算法设计、复杂性分析等方面具有深远的影响。递归可计算性是可计算性理论中的一个重要概念。一个函数被称为递归可计算的,如果存在一个图灵机能够在有限时间内计算出该函数的值。递归可计算的函数包括所有的可计算函数。可计算函数是计算理论的基础,理解可计算函数的性质和分类对于深入研究计算的本质至关重要。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 2013

计算机理论导引第三版答案

详细答案,计算机理论导引第三版答案,Introduction-to-the-Theory-of-Computation-Solutions

可计算理论的优点及缺陷

可计算理论对计算机科学的发展和理论基础起到了重要的作用,它提供了计算问题可解性和不可解性的理论依据,并且对计算机算法的设计和性能分析有着重要的指导作用。同时,可计算理论也与形式语言、自动机理论、复杂性理论等其他计算科学领域有着紧密的联系。可计算理论的研究主要涉及以下几个方面:计算模型:可计算理论研究的首要问题是什么样的问题可以通过计算解决,以及如何进行计算。常用的计算模型包括图灵机、lambda演...

人机与认知实验室 544

计算理论导引,麻省理工的书

计算理论导引是计算理论两本经典教材中的一本,我觉得很好,可以随时翻看,这些是计算机理论本质的东西。

计算机理论导引课后答案

计算机理论导引课后答案,word,pdf

计算理论是研究用计算机解决,可计算性理论

可计算性理论(Computability theory)作为计算理论的一个分支,研究在不同的计算模型下哪些算法问题能够被解决。相对应的,计算理论的另一块主要内容,计算复杂性理论考虑一个问题怎样才能被有效的解决。可计算理论的研究对象有三个 : ( 1) 判定问题; ( 2) 可计算函数;( 3) 计算复杂性。[1]中文名可计算性理论外文名computability theory学科计算机、数...

weixin_34966284的博客 2847

图灵(1936) - 论可计算数及其在判定问题中的应用(计算部分).pdf

图灵1936年论文解读(1):可计算性

Algorithm,Mathematic - 关于可计算理论

今天,如果一个计算机科学的硕士或博士不知道什么是不可判定问题,什么是停机问题,为什么停机问题不可解,什么是NP=?P问题,也有可能会受到讥笑。因为这些问题对于计算机科学而言,太基本、太重要了,它们都属于一门称为可计算理论的学科。是计算机科学研究人员应具备的修养型知识。让我们来看看什么是可计算理论 可计算理论是关于计算机械本身的数学理论。20世纪前,计算机械总是”算计”别的对象,很少”算计”

723

An Introduction To Recursive Function Theory

An Introduction To Recursive Function Theory

UFS Host Controller工作流程

contentsUFS架构图HCI接口架构传输请求接口(Transfer Request Interface)UFS 主机控制器寄存器接口(host controller Interface)UTP 层数据传输Host Software与Host Controller的交互Host Controller初始化配置与控制CRYPTOCFG 配置过程 该文档描述了UFS Host Controller的主要运作流程以及在开源内核代码hisi平台中的host controller的接口函数设计 文档大部分内容参

Frank_sample的专栏 1万+
上一篇: 一道abc+cba=1333的问题
下一篇: 计算理论重点——Theory of Computation
Savitch
博客等级 码龄16年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值