第1章 自动机:方法与体验
自动机理论研究抽象计算装置或“机器”。在20世纪30年代计算机出现之前,图灵研究过一种抽象机器,这种机器具备了今天计算机的所有能力,至少在计算能力上是这样的。图灵的目标是精确地描述一条界线,这条界线区分计算机能做什么和不能做什么;图灵的结论不仅适用于抽象的图灵机,也适用于今天的真实机器。
在20世纪40和50年代,许多研究者研究过更简单类型的机器,今天称为“有穷自动机”。起初建议用这些自动机来为人脑功能建立模型,后来发现这些自动机对于1.1节提到的各种其他目的也极为有用。在20世纪50年代后期,语言学家乔姆斯基(N.chomsky)开始研究形式“文法”。尽管这些文法不是严格意义上的机器,但与抽象自动机有密切关系,而且目前是一些重要软件部件(包括部分编译器在内)的基础。
在1969年,库克(s.C00k)扩展了图灵对什么能被计算和什么不能被计算的研究。库克设法分离出了两类问题:一类是计算机能有效解决的;另一类是计算机理论上能解决,但实际上要花费太长时间,以致除了非常小的问题实例以外,计算机是毫无用处的。后一类问题称为“难解的”或“NP-难的”。计算机硬件一直遵循着计算速度呈指数增长的规律(摩尔定律),但这也不太可能显著地影响解决难解问题大实例的能力。
所有这些理论进展都直接影响了计算机科学家今天的工作。有些概念,比如有穷自动机和某些类型的形式文法,用于设计和构造重要类型的软件。另一些概念,比如图灵机,则帮助我厂n们理解能期待软件做什么。特别是,难解问题的理论允许推断是否有可能“正面”处理一个问题,编写解决这个问题的程序(因为这个问题不属于难解的一类),或者是否需要找到某种方法来迂回处理这个难解的问题:找近似算法、用启发式算法或者用某种其他方法来限制程序解决这个问题所花费的时间。
展开