算法原意(3)算法的不完备性

算法原意(3)算法的不完备性

  本节仍然围绕算法的定义展开。算法是解决问题的办法,那么解决问题的办法又是什么呢?
  看个实例:拨号,拿起听筒,讲话,挂机。这是一个算法,它打出了一个电话。拨号、拿起听筒、讲话、挂机,他们也是算法,他们分别实现了什么,显而易见。那拨号这个算法又可以是:按1,按2,按3等组成,这些又都是算法。接着考虑按键,它又是由那些算法组成的呢?……
  因此,不妨说算法是由一些更简单的算法组成的。这些简单的算法的组合是顺序相关的,比如,洗澡、穿衣服,反过来,我就得湿淋淋的去工作了。有些顺序则是可以调换的,比如洗澡和叠被。两者先做哪一个都无关紧要。这种可以调换次序的算法,是可以同时执行的,比如我在洗澡,我的爱人帮我叠的好了被子,完全可以。这种情形称为算法的并行处理。具有这样性质的算法成为可并行算法。
  好,截至目前,我们可以说算法是一些更为简单的算法的序列。这是一个典型的递归定义。因为递归在算法中是一个重要的概念,这里先插一下,什么是递归呢?上面的例子就告诉我们,用自己解释自己就是递归。这里有个更经典的问题:问,什么是鸡?鸡蛋孵出来的。问,什么是鸡蛋?鸡生出来的……如此循环,就是逻辑上的先有鸡还是先有蛋的难题。它用鸡来解释鸡蛋,又用鸡蛋来解释鸡,应该算是一个递归,不过我们总是刻意的把这种情形排除,不只是因为这是一个逻辑悖论,更是因为他对解决问题没有任何帮助。星星还是那个星星,问题还是那个问题。我们的算法的递归定义却不然。“更简单”三个字就把问题规模改变了,也就是说问题的复杂度减小了(当然数量变大了),这时我们就讲这个递归在复杂度上是收敛的。递归的收敛性直接决定了这个算法是否可行。可行的递归算法一定是收敛的,不收敛的递归一定不是算法。递归定义的最後一个问题,他收敛于何处?递归的本质使得他必然是一个死循环,即使它是收敛的,因此我们必须定义一个递归的下限,也就是递归的逻辑收敛点。上面的算法定义,我们定义为当算法足够简单时递归终止。那么下面给出这个完整的递归定义,这里使用经典的四段递归式给出。
1、一些足够简单的方法是算法。
2、算法是一些更简单的算法的序列。
3、由以上1、2两条规则生成的是算法。
4、其他都不是算法。
  关于递归就谈到这里。上面的定义不准确。什么叫足够简单?不同情形下,有不同的理解,不同层次的应用有不同层次的思考。用户可以只提要求,他们把这认为是足够简单的。架构人员只划分层次,他们认为这足够简单。实现人员更进一步,达到系统调用。底层开发人员可能需要递归更多层,不过最多不会超过cpu的指令集。当然还可以接着向下,下面是电路组成,量子物理的内容,我们只讲算法,指令集是我们递归的终点。
  总而言之,算法是一系列cpu指令执行的序列,那么请问,计算机能够解决多少问题?这是一个组合问题。cpu的指令集是有限的,最长的指令也不会超过一个字长。事实上,现行的指令集往往仅有一两个字节。目前通用的IA-32体系便是如此,因为指令还要为操作数提供空间,如果执行一个操作还得读取两次,那么计算速度就要大打折扣。这里可以参考Java标准定义的指令集,由于它完全不用考虑底层电路的问题,他的指令集更规则些。由于组成最终算法的状态(指令)是有限的,那么有限的状态能否组成无限的算法,即有限的基本操作能否解决无限的问题呢?古语有云,“道生一,一生二,二生万物。”两个状态的组合就能组成万物。计算机更是希望零幺生成万物。上面的问题看似是肯定的,其实不然。要表示无限的状态,那么就需要无限的组合长度,而这是计算机不可接受的,不只是空间上,也是时间上。计算机硬件按照摩尔定律飞速前进了几十年,其唯一目的,就是大大增加这个组合量。然而以有限对无限,计算机的能力可以增强,但永远不会无所不能。算法执行的基础告诉我们,总有算法解决不了的问题,总有计算机解决不了的问题,总有人解决不了的问题,总有永远解决不了的问题。这就是算法的不完备性。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15822571/viewspace-606040/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15822571/viewspace-606040/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值