形式语言与自动机理论(1)----基础介绍

计算理论

计算:以机械而有效的方式,获取问题答案的过程。

计算理论的中心,逐渐从数学转到计算机科学。

计算理论和计算机科学所关心的核心问题是
计算机的基本能力和限制是什么?
在这里插入图片描述
包含两个内容,分别对应计算理论的两个重要研究方向。
一个是可计算性理论,一个是计算复杂性理论。

形式语言与自动机理论(本专栏)正是这两个方向的理论基础。

究竟哪些问题,可通过计算解决?—可计算性理论

计算作为一种能力,它是否有边界?是不是任何问题都可以通过计算来解决。
如果是,它会是什么样的?
如果不是,哪些问题可以,哪些问题不可以?为什么不可以?

为了能够严谨的研究机械而有效的计算过程,我们需要严格定义的概念去描述,需要严谨的计算模型去分析它。
这些模型,就是我们要学习的自动机理论。这些概念就是算法。

一个问题如果有了具体的算法之后,解决起来就不再需要太多的人的智慧,只需要根据算法的步骤,机械的计算就可以了。
比如,两个整数的最大公约数,使用欧几里得算法。

20世纪30年,数理逻辑学家在研究可计算的整数函数时,利用图灵机和lambda演算等计算模型,首次将算法的概念形式化。
从那以后,人们才能利用数理逻辑的方法,研究计算的本质。并且发现,计算也不是万能的。
确实存在一些问题,无法通过计算解决。或者说,这些问题是不存在算法的。(最后会给出这样的问题并给出证明)
在这里插入图片描述

解决可计算问题,究竟需要多少资源?—计算复杂性理论

利用计算去解决可计算问题,需要多少资源???
计算一个问题需要消耗的计算时间和占用的存储空间会达到什么样的程度?

如果一个问题无论使用什么算法,求解过程都需要相当多的资源,那其中的原因是什么?究竟是什么造成一些问题很难计算。而另一些却很容易,虽然其中原因未知,但是在分析各种有效计算模型的过程中。人们发现一个按照难度,给问题的分类的完美体系,如果元素周期表。对化学元素性质分类一样。

由这个体系,我们可以将未知的体系按照难易程度分类,再选择使用什么样的对策来解决。

目前,计算复杂性理论的研究依然是计算机科学领域的研究热点,但是已经超出了本课程的内容。我们不会涉及太多。希望本课程为大家研究计算复杂性做出一点儿基础积累。
在这里插入图片描述
因为为了研究可计算性和计算复杂性。需要使用和构造什么样的计算模型?恰恰就是形式语言与自动机理论的主要内容
这些模型都是高度抽象化的计算装置。简单明确但功能强大。
不但便于在理论分析中便于理论推导和证明,在需要实际问题中也有很多直接的应用

为了研究计算,要使用哪些计算模型?-----形式语言与自动机理论

什么是自动机理论?
以这些抽象的计算装置为研究对象,分析这些装置,所能解决问题的理论。
在这里插入图片描述
最重要的图灵机,具有现在所有实际的计算机的所有能力,是计算机的理论模型。
区分了那些问题是可以计算,那些问题是不能计算。
在多项式时间内,图灵机以确定的方式和非确定的方式,所解决的问题的问题类是否相同,即p是否等于np,依然是计算机中悬而未决的问题。

而且其他的稍简单的模型,比如说,有穷自动机。在数字电路,通信协议等实际问题中,有重要的应用。

文法,下推自动机 在计算机程序设计语言的设计,和编译器的实现上,发挥了重要作用

什么是形式语言?

如果自动机是研究计算的模型,那么语言就是研究计算的问题或实例。
形式语言:经数学定义的语言。
以数学的方法,从解决问题的角度,研究计算,首先需要以数学的方法来描述问题。这种描述就是形式语言。

使用语言这个概念,似乎有些奇怪。但其实和我们的常识一致。
在这里插入图片描述
可以以这样的观点,理解语言的构成。
语言简单的由字符,单词,句子,语法。
如,自然语言中的英文和中文等。
而只要有严谨的数学定义,就可以称为形式语言。比如化学分子式,程序设计语言等。甚至是没有任何含义的语言。

定义一个语言,首先要确定基本的字符有哪些。再确定构成单词和句子的计算规则。单词和句子在形式语言中,我们都认为是字符串。最关键的是如果描述这个基本规则。在形式语言与自动机理论中,这种描述实际上就是自动机。
所有形式语言和自动机是密不可分的。
一方面自动机以语言为处理对象,另一方面,语言是以自动机形式定义的。
在这里插入图片描述

基础知识

基本概念

  1. 字母表:符号(字符)的非空有穷集
    ∑ \sum 1 = {0, 1} 表示二进制数的字母表
    ∑ \sum 2 = {a, b, c, d, … z} 英语字母组成的语言
    ∑ \sum 3 = {x | x是一个汉字} 汉语所组成的一个语言

  2. 字符串:由某字母表中符号组成的有穷序列
    ∑ \sum 1 = {0, 1},那么0,1,00,111001为 ∑ \sum 11上的字符串
    ∑ \sum 2 = {a, b,c,…z},那么ab. xkcd为 ∑ \sum 2上的字符串

  3. 空串:记为 ξ \xi ξ, 有0个字符的串。
    字母表 ∑ \sum 可以是任意的,但都有 ξ \xi ξ ∉ \notin / ∑ \sum

在这里插入图片描述

  1. 字符串的长度:字符串中符号所占位置的个数,记为|U|
    例如: ∑ \sum = {0, 1} |0011| = 4
    (这种定义是接近自然语言描述的定义,但是,形式语言与自动机理论,是建立在一个严格的定义基础之上)
    若字母表为 ∑ \sum , 可递归定义为:
    在这里插入图片描述
    (前面的长度+最后一个字符)(前面的长度+1)
    递归定义
    在这里插入图片描述

  2. 字符串x和y的连接:将首尾相接得到新字符串的运算,记为x·y或xy。
    同样,可递归定义为
    在这里插入图片描述
    在这里插入图片描述
    对于连接运算,空串和字符串连接,从左边连接或右边连接都等于字符串本身,空串相当于连接运算的单元。

对于连接运算来说,点号一般省略。连接运算,满足结合律。不满足交换律

  1. 字符串x的n次幂(n>=0),递归定义为
    在这里插入图片描述
    在这里插入图片描述

  2. 集合A和集合B的连接,记为A·B或AB,定义为
    在这里插入图片描述
    A = {0, 11} B = {ab, ba}
    AB={0ab, 0ba, 11ab, 11ba}
    BA={ab0, ab11, ba0, ba11}

  3. 集合A的n次幂(n>=0), 递归定义为
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述 ∑ 1 \sum_{}^1 1中0和1不再是字符了,而是长度为1的字符串。
    程序设计时要明确区分字符和字符串,形式语言与自动机中往往不需要明确区分字符和字符串。因为在它的上下文中,很明显。
    ∑ 2 \sum_{}^2 2长度为2的字符串, ∑ 3 \sum_{}^3 3时,长度为3的字符串。

  4. 克林闭包(Kleene Closure)
    ∑ \sum 的任意次幂(包括零次幂)放一起,就是 ∑ \sum 的克林闭包。记为 ∑ ∗ \sum_{}^*
    一般用 ∑ \sum 来表示字母表, ∑ ∗ \sum_{}^* 的意思就是由 ∑ \sum 中的字符组成的任意长的字符串。
    定义也可以写为
    在这里插入图片描述
    ∑ \sum 也可以换为字符串集合
    在这里插入图片描述

  5. 正闭包(Positive Closure)
    克林闭包的零次幂去掉,从1次幂到无穷,就是正闭包
    在这里插入图片描述显然
    在这里插入图片描述对于一般字符串集合
    在这里插入图片描述

接下来定义为了研究计算模型,一步一步构造出来的

语言

在这里插入图片描述给定字母表 ∑ \sum 克林闭包的任意子集。也就是由给定字母表构成的任意的字符串的集合。
对于语言的限制很少。只要求在某个字母表上构成,所有的构成的任何字符串集合,包含空集空串等等。
语言的描述也多种多样。
语言的描述
在这里插入图片描述

空集不等于空串的集合

在这里插入图片描述
形式语言与自动机理论中有个典型问题
在这里插入图片描述

语言的成员性问题。
这个问题具有广泛性,各种实际问题都可以通过编码等转换成这样的问题。
语言和问题是相同的。
在这里插入图片描述

我们通过特定的语言问题去探索一般性问题通用的解法。
让w是数字,L是具体的语言,比如是素数
即判断某个数是否是素数

无论是肯定还是否定都可以明确的回答。这样的问题称为可判定的问题。

让语言以特定的规则的当时来描述,
例w是C语言的程序源码,L是C语言的语法规则来描述。
w是否能被正确的编译。
当满足特定条件的语法规则时,问题才容易实现。如果语法规则过于自由,是无法实现编译器的。

将w和L都看成可变的参数,

有些这样的问题是无法回答的。

著名的图灵停机问题。不可判定的问题

课程最后 会给详细介绍

形式化证明:演绎法,归纳法和反证法

在这里插入图片描述

y的长度进行归纳法

在这里插入图片描述

y的结构进行归纳
在这里插入图片描述

后面会频繁用归纳

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值