文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
第二部分 计算与可计算性
在本书的第一部分,我们已经讨论了几个熟悉的计算示例:命令式编程语言、状态机,以及通用计算机。那些示例向我们展示了计算差不多就是使用一个系统操纵信息并回答问题的过程。
在第二部分,我们将会大胆些,先在不熟悉的地方寻求计算,最后探索关于计算机器所能做之事的根本限制。
作为程序员,我们与编程语言和机器打交道,它们是根据我们对世界的认知模型进行设计的,而且我们期望它们带有一些特性,能轻松地把我们的思想转换成实现。这些以人为中心的设计是由便利性而非必要性驱动的,甚至一台设计简单的图灵机,也会让我们想起用纸和铅笔工作的数学家。
但是计算并不只会发生在友好的、为我们所熟悉的机器上。更多不寻常的系统的计算能力同样强大,即使它们内部的工作机制对于人类来说不容易控制或理解。我们将探索这个思想,在第 6 章尝试用极小的语言(这种语言似乎根本没什么有用的特性)写程序,并在第 7 章审视各种简单的系统,看看它们如何像更复杂的机器一样执行同样的计算。
在确信许多种系统里都可能发生强大的计算后,第8 章将探讨计算本身的能力。人们很自然地认为,只要付出足够的时间和努力写一个合适的程序,就能让计算机解决几乎任何问题,但事实证明了存在一个理论约束:有些问题无法用任何计算机解决,不管它多快多高效。
遗憾的是,一些不能解决的问题涉及程序行为的预测,而这恰好是程序员想要计算机帮他们做的。我们将会看到一些应对计算世界中这些硬限制的策略,而第9 章将探索如何利用抽象找出无法回答的问题的近似答案。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论