1、引言
为了回答诸如此类问题:哪些问题可以通过计算机解决?语言之间是否存在优势?运行一个程序前,是否可以确定该程序将要停止(终止)还是永远运行?用一种特定的语言解决一个问题需要多长时间?我们求助于一门学科:计算理论。
2、简单语言
通过简单语言可以看到计算机解决任何问题所需要最少语句是三条。它们是递增语句,递减语句和循环语句。
我们可以证明这种简单的语言能模拟一些流行语言中的多个语句。我们把每个模拟称为一个宏,它可以在其他模拟中使用,而不需要重复编码。
①简单语言中的宏
②输入和输出
3、图灵机
1图灵机是用来解决可计算问题的。它是现代计算机的基础。
2图灵机由三部分组成:磁带,读/写头,控制器(有限状态的自动机)
3对简单语言的模拟:递增语句,递减语句和循环语句。
4图灵机可以解决现代程序能解决的任何问题。
5邱齐-图灵论题:
如果存在一个能完成一个符号操纵任务的算法,那么也存在一台完成这个任务的图灵机。
4、歌德尔数
1在计算机科学理论中,一个无符号数能被分配给任何用特定语言编写的程序,这个数通常被称为歌德尔数。
2表示一个程序为数字
3翻译一个数字成程序
5、停机问题
一个典型的编程问题:
我们能编写一个程序来测试任何可以用歌德尔数表示的程序是否会终止吗?
已经证明这样的程序不可能存在,即停机问题是不可解决的。(可用反证法作为非正式证明)
6、可解问题和不可解问题
1不可解问题
2可解问题:多项式问题和非多项式问题
①可解问题的复杂度
大O表示法
非多项式问题程序的复杂度远比多项式问题复杂。