[TOC]
形式语言与自动机学习(一)
挖坑待填(指本课程不含有但需要是由其自动过渡的知识或涉及的重要知识):
-
计算理论:计算机的基本能力和限制是什么?
- 可计算理论--哥德尔不完备:存在不可计算的问题
- 计算复杂性理论--解决问题的占用资源及其原因?p与np?
-
计算的形式化:
- 图灵机
- lamda理论
为了研究以上计算理论,我们需要建立一定的计算模型,于是诞生了形式语言与自动机。
-
自动机理论:
- 图灵机
- 有限自动机
- 文法?下推自动机
-
形式语言:经过数学定义的语言。
在自然语言中,我们使用字符,即基本元,经过排列形成单词,单词形成句子,句子与句子,单词与单词的语法构建了一门自然语言。在化学分子式中也存在一套体系,在我们学习的高级程序设计语言,机器语言也同样如此,他们存在一定类似之处,我们试图将概念本身从中抽离出来,我们赋予一个名称,形式语言。
自动机的处理对象是形式语言,形式语言被自动机形式化的定义。
基本概念
为了描述好我们给出的名词,我们需要定义一些基本概念。基本概念里的概念在此不再被定义。
- 字母表:符号(字符)的非空有穷集。例二进制字母表和英语字母表
- 字符串:由某字母表中符号组成的有穷序列
-
特别地,空串:表示有0个字符的字符串,记作
-
基于递归定义基本运算:
-
字符串的长度:字符串中符号所占1位置的个数。用||表示
- 递归定义:
-
-
字符串的连接:若字符串x和字符串y进行连接,用xy表示连接。
- 递归定义:
-
字符串幂运算:字符串x的n(n>=0)次幂
- 递归定义:
其中x的0次幂为0可以理解为一个重复0次x的字符串,显然字符串为0,理解上是很自然的。
-
集合A的幂运算:集合A的n(n>=0)
- 递归定义:
-
克林闭包(Kleene Closure):
-
正闭包(Positive Closure):
语言
定义
有了这些基本概念,我们可以很好的描述语言的定义。
可以感性的理解为字母表的幂运算的集合,这个集合包含一系列字符串。
在语言中,所有的字母表都是有穷的。
关于语言的典型问题
一些一般性问题可以转化为语言问题,利用语言的计算模型来求解。例如下面的
- 语言成员性问题:判断某个数字是否为素数。我们关心的是这个一般性问题是否能转化为语言问题,通过语言的计算模型来解决,显然它是可以被回答的,我们仅需要判断这个数的因数的情况。我们可以将这种问题称为可判定问题,对于肯定的判断,例如xx是素数,我们能给出它的回答,但也存在一些问题是无法判断的,图灵停机问题。
形式化的证明
-
演绎法
-
归纳法:举例
-
反证法
有穷自动机(有限状态机)
确定的有穷自动机(Deterministic Finite Automaton,DFA)
DFA可以看作是一个由一条输入带,一个读头, 一个有穷控制器(记录状态,FInite Control)组成的,分别从初始状态指向接受状态,于是可以抽象为由五个参数定义一个DFA。
于是DFA可以被定义为一个五元组:
WHAT IS ”DETERMINSTIC“?
状态转移由输入和现有状态唯一确定:
e.q.请设计DFA,在任何由0和1构成的串中,接受含有01子串的全部串。
我们可以直接列出接收状态:
发现01
q3:当前的所有状态:
q1:刚刚读入1,但未发现01
q2:刚刚读入0,但未发现01
q3:发现01
于是可以定义为一个DFA A:
状态转移函数:
据此我们可以用状态转移图来描述这个状态转移函数:
我们也可以用状态转移表来描述:
| 0 | 1 | |
|---|---|---|
| q1 | q2 | q1 |
| q2 | q2 | q3 |
| q3 | q3 | q3 |
DFA的语言与正则语言
前面我们提到语言可以被自动机形式定义,对于被DFA形式化定义的语言,我们称之为正则语言。
如果语言L是一个DFA D的语言,即L = L(D),则称L是正则语言。
e.q.设计DFA接受{0,1}上的字符串w,且w是3的倍数的二进制
我们可以直接得到状态转移表:
qn表示当前状态下的字符串w除3的余数为n
| 0 | 1 | |
|---|---|---|
| q0 | q0 | q1 |
| q1 | q2 | q0 |
| q2 | q1 | q2 |
| qs(开始状态为空串) | qi | q1 |
| qi | qi | qi |
非确定有穷自动机(Nonedeterminstic Finite Automanton)
- 同一状态的相同输入可以有不同跳转;
- 自动机可以同时处于多个状态.
由0和1构成的串中,接受全部以01结尾的串。
用DFA可以画出:
但是我们也可以使得自动机处于多种状态,比如读入q0状态读入{0,1}后续可能是01直接接受,也可能是不能接受但是能跳转,于是我们可以让自动机“分头行动”:
于是我们能得到NFA的定义:
定义一个五元组:
区别在于对delta的定义:
DFA与NFA的等价性
如果语言L被NFA接受,当且仅当L被DFA接受
使用子集构造法证明,因为NFA的跳转状态是所有DFA跳转状态的一个子集,那么利用子集构造法证明是自然的: