可计算性总结

能够想到的

图灵机形式简洁且功能强大,但是图灵机形式化表示一个算法非常复杂,lambda演算则通过考察函数给出了计算的纯数学表示,使人折服于这简单之中蕴含的深刻哲理与美。α等价、β规约、 等价,层层的抽象,剑指问题本质——最简洁的数学表达。大而至道的理论研究我辈不敢触碰,通过理论学习指导实际中的程序设计可谓是现实之需。

从过程到对象、泛型到函数式编程、组件利用、敏捷开发无不体现着程序设计者对快速高效软件开发的孜孜以求。大量训练程序编写或许只是做出好的软件的一个基本要求,能否实习部分到整体的完美拼接是更高的一个要求。求解一个问题将其转化成为一个模型,抽象、抽象再抽象。如何能够实现更好、更合理的抽象呢?再大的机器也是又小的齿轮组合起来的,抽象从小做起,从函数、数据结构做起。

基本操作(算数运算)到复合操作,再到过程,过程可以是递归的也可以是线性迭代的。再抽象出高阶过程,过程作为参数,过程作为返回值。基本数据到复合数据再到对象,越来越抽象的数据,在lambda演算中以函数为中心的定义中,数据甚至不需要有结构,只是用函数就可以实现,更进一步,基本数据都可以表示为函数(还记得上课时的boolean变量的表示吗),举一个二元组的例子:

(define (cons x y)) (define (dispatch m) (cond ((= m 0) x) ((= m 1) y)dispatch)

(define (car z) (z 0))

(define (cdr z) (z 1)),在这个全部都是函数的操作的数据结构定义了,数据本应该具有的结构消失了,取而代之的是函数的操作(过程)。

    追求智慧的本源产生了哲学,追求解决问题的方法产生了计算,什么是机器可以计算的,机器的局限在那里,Church-Turing论题说明算法是可数的,每一个算法对应一个图灵机,但是大千世界问题的集合是算法集合的超集,不能够找到算法的问题要远远多于能够解决的问题,而能够找到算法的问题中,难解的问题占绝大多数,就像淡水一样,真正能够利用Turing机在现实意义下解决的问题是占少数的,认识到这个使工程师们认识到计算机的局限性,不必消耗大量的时间精力去求解不能解决的问题。

    也许学习理论计算模型对编程实践没有什么帮助,当我们使用电脑时,就像不会把人看作是各种原子的结合一样,有谁会把它看作一条纸带,一个读写头在咔咔作响的移动,然而真理摆在眼前,当我们有机会触及它的时候,为什么要选择不呢。从集合出发,二元关系派生出函数,从最简洁的三条指令的程序的模型出发形式化的定义了可计算的概念。可计算函数与部分可计算函数、递归集与递归可枚举集、可判定与可识别这些不同计算模型下的等价定义体现着计算理论的本质概念。当我们做文本编辑的时候想到的是自动机,做程序语言编程的时候想到的是CFG,这些比之图灵机计算能力逊色很多的计算模型可以完成如此复杂令人惊叹的任务,基于存储程序式的计算机可以看成是LBA,让我无时不刻的感慨理论的强大之处,任何生命力强大的工程产品都不是凭空想象的,必然要有雄厚理论做基础。

       康托发明了伟大的对角线证明方法,然而就是这个方法也有其局限性;哥德尔证明一阶算数系统的不完备性,这些说明再强大的机器也有其所不能解决的问题。现实的意义是图灵机能够帮助我们解决什么问题,计算复杂性理论的研究很好的解释了这个问题,多项式时间是能够容忍的,多项式空间的许多计算在你我有生之年都计算不出一个结果。理论上的一个安慰是如果我们能够找到一个NPC的多项式算法,那么所有NP问题都可以多项式单带图灵机求解。一个形式简单的扩展就变成指数空间的,在不可数的所有语言集合中,我们究竟能够分析出多少种性质来能够说的清楚吗?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值