9.2 带 有 输 出 的 有 限 状 态 机 \color{blue}9.2 带有输出的有限状态机 9.2带有输出的有限状态机
\qquad
许多器件,包括计算机元件,可以用一种叫做有限状态机的结构来模拟。很多类型的有限状态机可用在模型里。所有这些有限状态机都包含一个有限状态集合,一个指定的初始状态,一个输入字母表,和一个转换函数,这个函数为任何一个状态和输入对,给出下一个状态,这一节我们将讨论带有输出的有限状态机。我们将说明如何用有限状态机来模拟自动贩卖机、延迟输入机、整数加法器等。
\qquad
在给出正式定义之前,我们先来看一下自动贩卖机是如何被模拟的。一个自动贩卖机可以接收5分、10分、25分的钱。当收到的总款数为30分或更多分钱时,机器立即找回多余的钱。当总数达到30分,余款找完之后,顾客可以按以下橙色的按钮就得到一个橙汁,或者按一下红色按钮就得到一个苹果汁。我们通过描述它的状态看它是如何工作的,看一下当一个输入进来的时候,它的状态和输出是如何变化的。
\qquad
这个机器共有7个不同的状态
s
i
,
i
=
0
,
1
,
2
,
⋯
,
6
,
s_i,i=0,1,2,\cdots, 6,
si,i=0,1,2,⋯,6,其中
s
i
s_i
si代表收到了
5
i
5i
5i分钱。机器开始的状态是
s
0
s_0
s0,表示一分钱也没有收到。可能的输入是5分、10分、25分、橙色按钮和红色按钮。可能的输出是,什么也没有(n)、5分、10分、15分、20分、25分、一个橙汁和苹果汁。
\qquad
我们用下面的例子说明这个机器的模型是如何工作的。假设一个学生在投如10分钱后,又投入25分钱,找回5分钱,然后按橙色按钮要橙汁。机器的开始状态是
s
0
s_0
s0,第一个输入是10分钱,状态从
s
0
s_0
s0变成
s
2
s_2
s2并且没有输出。第二个输入是25分钱,状态从
s
2
s_2
s2变成
s
6
s_6
s6并且给出5分钱做为输出。下一个输入是橙色按钮,状态从
s
6
s_6
s6变成
s
0
s_0
s0并且给出一个橙汁做为输出。我们可以把这个机器的所有状态变化和输出列在一个表中。为了做这个工作,我们要给每一个状态和输入对,指定一个状态和输出,表9.2.1为每一个状态和输入对,给出了转换和输出。
表9.2.1 自动贩卖机的状态表 | ||
状态 | 下一个状态 | 输出 |
输入 5 10 25 O R | 输入 5 10 25 O R | |
\begin{array}{l}s_0 \\ s_1 \\ s_2 \\ s_3 \\ s_4 \\s_5 \\ s_6 \end{array} | \begin{array}{l}s_1 & s_2 & s_5 & s_0 & s_0 \\ s_2 & s_3 & s_6 & s_1 & s_1 \\ s_3 & s_4 & s_6 & s_2 & s_2 \\ s_4 & s_5 & s_6 & s_3 & s_3 \\ s_5 & s_6 & s_6 & s_4 & s_4 \\s_6 & s_6 & s_6 & s_5 & s_5 \\ s_6 & s_6 & s_6 & s_0 & s_0 \end{array} | \begin{array}{l}n & n & n & n & n \\ n & n & n & n & n \\ n & n & 5 & n & n \\ n & n & 10 & n & n \\ n & n & 15 & n & n \\n & 5 & 20 & n & n \\ 5 & 10 & 25 & OJ & AJ \end{array} |
另 一 种 描 述 机 器 行 为 的 方 法 是 使 用 带 有 标 号 的 有 向 图 来 表 示 , 其 中 每 个 圈 代 表 一 个 状 态 , 边 代 表 转 换 , 并 且 边 上 标 上 输 入 和 输 出 。 另一种描述机器行为的方法是使用带有标号的有向图来表示,其中每个圈代表一个状态,\\\\ 边代表转换,并且边上标上输入和输出。 另一种描述机器行为的方法是使用带有标号的有向图来表示,其中每个圈代表一个状态,边代表转换,并且边上标上输入和输出。
定
义
9.1.1.
一
个
有
限
状
态
机
M
=
(
S
,
I
,
O
,
f
,
g
,
s
0
)
,
包
含
一
个
有
限
的
状
态
集
合
S
,
一
个
有
限
输
入
字
母
表
I
,
一
个
有
限
输
出
字
母
表
O
,
一
个
转
换
函
数
f
,
它
为
每
一
个
状
态
和
输
入
对
,
给
出
一
个
新
的
状
态
,
一
个
输
出
函
数
g
,
它
为
每
一
个
状
态
和
输
入
对
,
给
出
一
个
输
出
,
一
个
初
始
状
态
s
0
.
设
M
=
(
S
,
I
,
O
,
f
,
g
,
s
0
)
是
一
个
有
限
状
态
机
,
我
们
可
以
用
一
个
状
态
表
来
表
示
所
有
状
态
和
输
入
对
的
转
换
函
数
f
和
输
出
函
数
g
的
值
。
定义9.1.1.一个有限状态机M=(S, I, O, f, g, s_0),包含一个有限的状态集合S,一个\\\\ 有限输入字母表I, 一个有限输出字母表O,一个转换函数f,它为每一个状态和输入对,\\\\ 给出一个新的状态,一个输出函数g,它为每一个状态和输入对,给出一个输出,一个初\\\\ 始状态s_0.设M = (S, I, O, f, g, s_0)是一个有限状态机,我们可以用一个状态表来表示\\\\ 所有状态和输入对的转换函数f和输出函数g的值。
定义9.1.1.一个有限状态机M=(S,I,O,f,g,s0),包含一个有限的状态集合S,一个有限输入字母表I,一个有限输出字母表O,一个转换函数f,它为每一个状态和输入对,给出一个新的状态,一个输出函数g,它为每一个状态和输入对,给出一个输出,一个初始状态s0.设M=(S,I,O,f,g,s0)是一个有限状态机,我们可以用一个状态表来表示所有状态和输入对的转换函数f和输出函数g的值。
例
9.2.1
表
9.2.2
给
出
了
一
个
有
限
状
态
机
,
其
中
S
=
{
s
0
,
s
1
,
s
2
,
s
3
}
,
I
=
{
0
,
1
}
,
O
=
{
0
,
1
}
,
前
二
列
代
表
转
换
函
数
f
的
值
,
后
两
列
代
表
输
出
函
数
g
的
值
。
另
一
种
表
示
有
限
状
态
机
的
方
法
叫
做
状
态
图
,
它
是
一
有
向
图
,
边
上
带
有
标
记
,
状
态
用
圆
圈
表
示
,
边
上
根
据
函
数
标
着
输
入
输
出
对
。
例9.2.1表9.2.2给出了一个有限状态机,其中S = \lbrace s_0, s_1, s_2, s_3 \rbrace, I = \lbrace 0, 1 \rbrace, O = \\\\ \lbrace 0, 1 \rbrace, 前二列代表转换函数f的值,后两列代表输出函数g的值。另一种表示有限状态机\\\\ 的方法叫做状态图,它是一有向图,边上带有标记,状态用圆圈表示,边上根据函数标着\\\\ 输入输出对。
例9.2.1表9.2.2给出了一个有限状态机,其中S={s0,s1,s2,s3},I={0,1},O={0,1},前二列代表转换函数f的值,后两列代表输出函数g的值。另一种表示有限状态机的方法叫做状态图,它是一有向图,边上带有标记,状态用圆圈表示,边上根据函数标着输入输出对。
例 9.2.1. 表 9.2.2 给 出 了 一 个 有 限 状 态 机 , 其 中 S = { s 0 , s 1 , s 2 , s 3 } , I = { 0 , 1 } , O = { 0 , 1 } , 前 两 列 代 表 转 换 函 数 f 的 值 , 后 两 列 代 表 输 出 函 数 g 的 值 。 例9.2.1.表9.2.2给出了一个有限状态机,其中S = \lbrace s_0, s_1, s_2, s_3 \rbrace, I = \lbrace 0, 1 \rbrace, O \\\\ = \lbrace 0, 1 \rbrace, 前两列代表转换函数f的值,后两列代表输出函数g的值。 例9.2.1.表9.2.2给出了一个有限状态机,其中S={s0,s1,s2,s3},I={0,1},O={0,1},前两列代表转换函数f的值,后两列代表输出函数g的值。
表9.2.2 | ||
状态 | f | g |
输入 0 1 | 输出 0 1 | |
\begin{array}{l}s_0 \\ s_1 \\ s_2 \\ s_3 \end{array} | \begin{array}{l}s_1 & s_0 \\ s_3 & s_0 \\ s_1 & s_2 \\ s_2 & s_1 \end{array} | \begin{array}{l}1 & 0 \\ 1 & 1 \\ 0 & 1 \\ 0 & 0 \end{array} |
例9.2.3.给出状态图9.2.3所示的有限状态机的状态表。
解:状态表如表9.2.3所示。
表9.2.3 | ||
状态 | f | g |
输入 0 1 | 输出 0 1 | |
\begin{array}{l}s_0 \\ s_1 \\ s_2 \\ s_3 \\ s_4 \end{array} | \begin{array}{l}s_1 & s_3 \\ s_1 & s_2 \\ s_3 & s_4 \\ s_1 & s_0 \\ s_3 & s_4 \end{array} | \begin{array}{l}1 & 0 \\ 1 & 1 \\ 0 & 0 \\ 0 & 0 \\ 0 & 0 \end{array} |
假 设 一 个 输 入 串 是 x = x 1 x 2 ⋯ x k , 则 读 如 这 个 输 入 可 以 让 状 态 机 从 状 态 s 0 变 到 状 态 s 1 , 其 中 s 1 = f ( s 0 , x 1 ) , 然 后 变 到 状 态 s 2 , 其 中 s 2 = f ( s 1 , x 2 ) , ⋯ , 这 一 系 列 的 转 换 也 产 生 了 一 个 输 出 串 y = y 1 y 2 ⋯ y k , 其 中 , y 1 = g ( s 0 , x 1 ) 对 应 从 状 态 s 0 到 状 态 s 1 的 转 换 , y 2 = g ( s 1 , x 2 ) 对 应 从 状 态 s 1 到 状 态 s 2 的 转 换 , ⋯ 。 一 般 地 , y j = g ( s j − 1 , x j ) , j = 1 , 2 , ⋯ , k 。 有 时 候 我 们 也 把 输 出 函 数 表 示 成 g ( x ) = y , 其 中 y 是 对 应 输 入 x 的 输 出 , 这 种 记 法 很 多 应 用 中 都 很 有 用 处 。 假设一个输入串是x = x_1x_2 \cdots x_k,则读如这个输入可以让状态机从状态s_0变到状态\\\\ s_1,其中s_1 = f(s_0, x_1),然后变到状态s_2,其中s_2 = f(s_1, x_2),\cdots, 这一系列的转换\\\\ 也产生了一个输出串y = y_1y_2 \cdots y_k, 其中,y_1 = g(s_0, x_1)对应从状态s_0到状态s_1的\\\\ 转换,y_2 = g(s_1, x_2)对应从状态s_1到状态s_2的转换,\cdots。一般地,y_j = g(s_{j-1}, x_j\\\\ ), j = 1, 2, \cdots, k。有时候我们也把输出函数表示成g(x) = y,其中y是对应输入x的\\\\ 输出,这种记法很多应用中都很有用处。 假设一个输入串是x=x1x2⋯xk,则读如这个输入可以让状态机从状态s0变到状态s1,其中s1=f(s0,x1),然后变到状态s2,其中s2=f(s1,x2),⋯,这一系列的转换也产生了一个输出串y=y1y2⋯yk,其中,y1=g(s0,x1)对应从状态s0到状态s1的转换,y2=g(s1,x2)对应从状态s1到状态s2的转换,⋯。一般地,yj=g(sj−1,xj),j=1,2,⋯,k。有时候我们也把输出函数表示成g(x)=y,其中y是对应输入x的输出,这种记法很多应用中都很有用处。
例
9.2.4.
对
于
图
9.2.3
所
示
的
有
限
状
态
机
,
如
果
输
入
是
101011
,
找
出
对
应
的
输
出
是
什
么
?
例9.2.4.对于图9.2.3所示的有限状态机,如果输入是101011,找出对应的输出是什么?
例9.2.4.对于图9.2.3所示的有限状态机,如果输入是101011,找出对应的输出是什么?
解
:
输
出
是
001000
。
连
续
状
态
和
输
出
如
表
9.2.4
所
示
。
解:输出是001000。连续状态和输出如表9.2.4所示。
解:输出是001000。连续状态和输出如表9.2.4所示。
表9.2.4 | |
输入 | 101011- |
状态 | $s_0s_3s_1s_2s_3s_0s_3$ |
输出 | 001000- |
例
9.2.5.
在
许
多
电
子
器
件
中
有
一
个
很
重
要
的
元
件
,
称
为
单
位
延
迟
器
,
它
的
作
用
是
把
输
入
延
迟
一
个
指
定
的
时
间
输
出
。
怎
样
构
造
一
个
有
限
状
态
机
来
把
一
个
输
入
串
延
迟
一
个
单
位
时
间
输
出
呢
?
即
对
于
给
定
的
二
进
制
输
入
串
x
1
x
2
⋯
x
k
,
可
以
得
到
一
个
输
出
二
进
制
串
:
0
x
1
x
2
⋯
x
k
−
1
。
例9.2.5.在许多电子器件中有一个很重要的元件,称为单位延迟器,它的作用是把输入\\\\ 延迟一个指定的时间输出。怎样构造一个有限状态机来把一个输入串延迟一个单位时间\\\\ 输出呢?即对于给定的二进制输入串x_1x_2 \cdots x_k,可以得到一个输出二进制串:\\\\ 0x_1x_2 \cdots x_{k-1}。
例9.2.5.在许多电子器件中有一个很重要的元件,称为单位延迟器,它的作用是把输入延迟一个指定的时间输出。怎样构造一个有限状态机来把一个输入串延迟一个单位时间输出呢?即对于给定的二进制输入串x1x2⋯xk,可以得到一个输出二进制串:0x1x2⋯xk−1。
解
:
我
们
把
这
个
延
迟
器
构
造
成
有
两
个
输
入
,
即
0
和
1
,
有
一
个
初
始
状
态
s
0
,
因
为
它
要
记
住
上
一
个
输
入
是
0
还
是
1
,
所
以
还
需
要
两
个
另
外
的
状
态
s
1
,
s
2
,
如
果
上
一
个
输
入
是
1
,
则
它
有
状
态
s
1
,
如
果
上
一
个
状
态
输
入
是
0
,
则
它
有
状
态
s
2
,
对
于
从
s
0
出
发
的
第
一
个
转
换
所
产
生
的
输
出
是
0
,
从
s
1
出
发
的
转
换
产
生
一
个
输
出
1
,
从
s
2
出
发
的
转
换
产
生
一
个
输
出
0
,
对
于
给
定
的
二
进
制
输
入
串
x
1
x
2
⋯
x
k
,
可
以
得
到
一
个
输
出
二
进
制
串
0
x
1
x
2
⋯
x
k
−
1
。
状
态
图
如
图
9.2.4
所
示
。
解:我们把这个延迟器构造成有两个输入,即0和1,有一个初始状态s_0,因为它要记\\\\ 住上一个输入是0还是1,所以还需要两个另外的状态s_1,s_2,如果上一个输入是1,则\\\\ 它有状态s_1,如果上一个状态输入是0,则它有状态s_2,对于从s_0出发的第一个转换所\\\\ 产生的输出是0,从s_1出发的转换产生一个输出1,从s_2出发的转换产生一个输出0,\\\\ 对于给定的二进制输入串x_1x_2 \cdots x_k,可以得到一个输出二进制串0x_1x_2 \cdots x_{k-1}。\\\\ 状态图如图9.2.4所示。
解:我们把这个延迟器构造成有两个输入,即0和1,有一个初始状态s0,因为它要记住上一个输入是0还是1,所以还需要两个另外的状态s1,s2,如果上一个输入是1,则它有状态s1,如果上一个状态输入是0,则它有状态s2,对于从s0出发的第一个转换所产生的输出是0,从s1出发的转换产生一个输出1,从s2出发的转换产生一个输出0,对于给定的二进制输入串x1x2⋯xk,可以得到一个输出二进制串0x1x2⋯xk−1。状态图如图9.2.4所示。
例
9.2.6.
构
造
二
进
制
非
负
整
数
加
法
器
的
有
限
状
态
机
。
例9.2.6.构造二进制非负整数加法器的有限状态机。
例9.2.6.构造二进制非负整数加法器的有限状态机。
解
:
当
(
x
n
⋯
x
1
x
0
)
和
(
y
n
⋯
y
1
y
0
)
相
加
时
,
过
程
如
下
:
首
先
字
节
x
0
和
字
节
y
0
相
加
产
生
和
的
字
节
z
0
和
一
个
进
位
字
节
c
0
,
这
个
进
位
或
者
为
0
或
者
为
1
,
然
后
字
节
x
1
、
字
节
y
1
以
及
进
位
c
0
相
加
产
生
和
的
字
节
z
1
和
一
个
进
位
字
节
c
1
,
这
个
过
程
进
行
n
步
,
直
到
字
节
x
n
、
字
节
y
n
以
及
前
一
个
进
位
字
节
c
n
−
1
相
加
产
生
和
的
字
节
z
n
和
一
个
进
位
字
节
c
n
,
这
个
字
节
c
n
就
是
和
的
字
节
z
n
+
1
。
完
成
这
个
加
法
器
的
有
限
状
态
机
只
用
到
两
个
状
态
,
为
简
单
起
见
,
我
们
假
设
字
节
x
n
和
字
节
y
n
都
为
0
,
(
这
样
我
们
就
不
用
考
虑
和
中
的
字
节
z
n
+
1
了
)
,
初
始
状
态
s
0
为
了
记
住
前
一
个
进
位
是
0
(
或
者
前
者
最
右
面
的
两
个
字
节
相
加
)
,
另
外
一
个
状
态
s
1
,
是
为
了
记
住
前
一
个
进
位
是
1
的
。
因
为
这
个
状
态
机
的
输
入
是
两
个
字
节
的
对
,
所
以
有
四
个
可
能
的
输
入
,
我
们
记
为
00
,
01
,
10
,
11
(
分
别
代
表
第
一
个
和
第
二
个
字
节
)
,
转
换
和
输
出
根
据
由
输
入
的
两
个
字
节
代
表
的
和
与
状
态
代
表
的
进
位
来
构
造
。
例
如
,
当
状
态
为
s
1
,
输
入
为
01
,
则
下
一
个
状
态
为
s
1
,
输
出
为
0
,
因
为
和
是
0
+
1
+
1
=
(
10
)
2
。
这
个
状
态
图
见
图
9.2.5.
解:当(x_n \cdots x_1x_0)和(y_n \cdots y_1y_0)相加时,过程如下:首先字节x_0和字节y_0相加\\\\ 产生和的字节z_0和一个进位字节c_0,这个进位或者为0或者为1,然后字节x_1、字节y_1\\\\ 以及进位c_0相加产生和的字节z_1和一个进位字节c_1,这个过程进行n步,直到字节x_n、\\\\ 字节y_n以及前一个进位字节c_{n-1}相加产生和的字节z_n和一个进位字节c_n,这个字节c_n\\\\ 就是和的字节z_{n+1}。完成这个加法器的有限状态机只用到两个状态,为简单起见,我\\\\ 们假设字节x_n和字节y_n都为0,(这样我们就不用考虑和中的字节z_{n+1}了),初始状态\\\\ s_0为了记住前一个进位是0(或者前者最右面的两个字节相加),另外一个状态s_1,是为\\\\ 了记住前一个进位是1的。因为这个状态机的输入是两个字节的对,所以有四个可能的\\\\ 输入,我们记为00,01,10,11(分别代表第一个和第二个字节),转换和输出根据由输入\\\\ 的两个字节代表的和与状态代表的进位来构造。例如,当状态为s_1,输入为01,则下一\\\\ 个状态为s_1,输出为0,因为和是0+1+1=(10)_2。这个状态图见图9.2.5.
解:当(xn⋯x1x0)和(yn⋯y1y0)相加时,过程如下:首先字节x0和字节y0相加产生和的字节z0和一个进位字节c0,这个进位或者为0或者为1,然后字节x1、字节y1以及进位c0相加产生和的字节z1和一个进位字节c1,这个过程进行n步,直到字节xn、字节yn以及前一个进位字节cn−1相加产生和的字节zn和一个进位字节cn,这个字节cn就是和的字节zn+1。完成这个加法器的有限状态机只用到两个状态,为简单起见,我们假设字节xn和字节yn都为0,(这样我们就不用考虑和中的字节zn+1了),初始状态s0为了记住前一个进位是0(或者前者最右面的两个字节相加),另外一个状态s1,是为了记住前一个进位是1的。因为这个状态机的输入是两个字节的对,所以有四个可能的输入,我们记为00,01,10,11(分别代表第一个和第二个字节),转换和输出根据由输入的两个字节代表的和与状态代表的进位来构造。例如,当状态为s1,输入为01,则下一个状态为s1,输出为0,因为和是0+1+1=(10)2。这个状态图见图9.2.5.
例
9.2.7.
在
一
些
编
码
方
案
中
,
如
果
一
个
信
息
中
连
续
出
现
3
个
1
,
那
么
接
收
者
就
直
到
出
现
了
传
输
错
误
,
构
造
一
个
有
限
状
态
机
当
且
仅
当
最
后
收
到
的
三
个
字
节
都
是
1
的
时
候
,
它
的
输
出
是
1
。
例9.2.7.在一些编码方案中,如果一个信息中连续出现3个1,那么接收者就直到出现\\\\ 了传输错误,构造一个有限状态机当且仅当最后收到的三个字节都是1的时候,它的输\\\\ 出是1。
例9.2.7.在一些编码方案中,如果一个信息中连续出现3个1,那么接收者就直到出现了传输错误,构造一个有限状态机当且仅当最后收到的三个字节都是1的时候,它的输出是1。
解
:
这
个
状
态
机
有
三
个
状
态
,
初
始
状
态
s
0
记
着
前
一
个
输
入
的
值
,
如
果
前
一
个
输
入
存
在
,
说
明
它
不
是
1
。
状
态
s
1
记
着
前
一
个
输
入
是
1
,
如
果
前
一
个
输
入
的
再
前
一
个
输
入
存
在
,
则
它
不
是
1
。
状
态
s
2
记
着
前
两
个
输
入
都
是
1
,
输
入
1
可
以
把
状
态
s
0
变
成
状
态
s
1
,
因
为
现
在
被
读
入
的
只
有
一
个
1
,
而
不
是
两
个
连
续
的
1
;
可
以
把
状
态
s
1
变
成
状
态
s
2
,
因
为
现
在
被
读
入
的
是
两
个
连
续
的
1
;
可
以
把
状
态
s
2
变
成
它
自
身
,
因
为
现
在
被
读
入
的
至
少
是
两
个
连
续
的
1
。
一
个
输
入
0
把
任
何
状
态
都
变
成
状
态
s
0
,
因
为
它
打
破
串
中
1
的
连
续
性
。
当
一
个
1
被
读
到
,
并
且
转
换
是
从
状
态
s
2
到
自
身
的
时
候
,
输
出
为
1
,
因
为
结
合
输
入
和
状
态
我
们
可
以
知
道
已
经
读
到
了
连
续
的
3
个
1.
所
有
其
它
的
输
出
都
是
0
,
状
态
图
如
下
图
9.2.7
所
示
。
输
出
为
1
当
且
仅
当
至
今
为
止
读
到
的
输
入
串
以
111
结
尾
的
有
限
状
态
机
。
图
中
所
给
的
有
限
状
态
机
是
语
言
识
别
器
的
例
子
,
因
为
它
输
出
为
1
当
且
仅
当
至
今
读
到
的
输
入
串
具
有
指
定
的
性
质
,
语
言
识
别
是
有
限
状
态
机
的
一
个
重
要
应
用
。
解:这个状态机有三个状态,初始状态s_0记着前一个输入的值,如果前一个输入存在,\\\\ 说明它不是1。状态s_1记着前一个输入是1,如果前一个输入的再前一个输入存在,则\\\\ 它不是1。状态s_2记着前两个输入都是1,输入1可以把状态s_0变成状态s_1,因为现在被\\\\ 读入的只有一个1,而不是两个连续的1;可以把状态s_1变成状态s_2,因为现在被读入的\\\\ 是两个连续的1;可以把状态s_2变成它自身,因为现在被读入的至少是两个连续的1。\\\\ 一个输入0把任何状态都变成状态s_0,因为它打破串中1的连续性。当一个1被读到,并\\\\ 且转换是从状态s_2到自身的时候,输出为1,因为结合输入和状态我们可以知道已经读\\\\ 到了连续的3个1.所有其它的输出都是0,状态图如下图9.2.7所示。输出为1当且仅当至今\\\\ 为止读到的输入串以111结尾的有限状态机。图中所给的有限状态机是语言识别器的例\\\\ 子,因为它输出为1当且仅当至今读到的输入串具有指定的性质,语言识别是有限状态\\\\ 机的一个重要应用。
解:这个状态机有三个状态,初始状态s0记着前一个输入的值,如果前一个输入存在,说明它不是1。状态s1记着前一个输入是1,如果前一个输入的再前一个输入存在,则它不是1。状态s2记着前两个输入都是1,输入1可以把状态s0变成状态s1,因为现在被读入的只有一个1,而不是两个连续的1;可以把状态s1变成状态s2,因为现在被读入的是两个连续的1;可以把状态s2变成它自身,因为现在被读入的至少是两个连续的1。一个输入0把任何状态都变成状态s0,因为它打破串中1的连续性。当一个1被读到,并且转换是从状态s2到自身的时候,输出为1,因为结合输入和状态我们可以知道已经读到了连续的3个1.所有其它的输出都是0,状态图如下图9.2.7所示。输出为1当且仅当至今为止读到的输入串以111结尾的有限状态机。图中所给的有限状态机是语言识别器的例子,因为它输出为1当且仅当至今读到的输入串具有指定的性质,语言识别是有限状态机的一个重要应用。
许 多 不 同 类 型 的 有 限 状 态 机 用 来 模 拟 计 算 , 这 一 节 所 给 的 有 限 状 态 机 是 带 有 输 出 的 有 限 状 态 机 也 称 为 M e a l y 机 , 还 有 另 外 一 种 很 重 要 的 带 有 输 出 的 有 限 状 态 机 , 它 的 输 出 只 由 状 态 决 定 。 这 种 状 态 机 就 是 M o o r e 机 。 例 9.2.7. 表 明 了 一 个 M e a l y 机 是 如 何 用 语 言 识 别 的 , 然 而 , 另 外 一 种 没 有 输 出 的 有 限 状 态 机 也 常 用 于 这 个 用 途 , 没 有 输 出 的 有 限 状 态 机 也 称 有 限 状 态 自 动 机 , 它 有 一 组 终 止 状 态 集 合 , 一 符 号 串 被 识 别 当 且 仅 当 这 个 符 号 串 让 初 始 状 态 到 终 止 状 态 , 我 们 将 再 下 一 节 学 习 这 种 类 型 的 有 限 状 态 机 。 许多不同类型的有限状态机用来模拟计算,这一节所给的有限状态机是带有输出的有\\\\ 限状态机也称为Mealy机,还有另外一种很重要的带有输出的有限状态机,它的输出\\\\ 只由状态决定。这种状态机就是Moore机。例9.2.7.表明了一个Mealy机是如何用语言\\\\ 识别的,然而,另外一种没有输出的有限状态机也常用于这个用途,没有输出的有限\\\\ 状态机也称有限状态自动机,它有一组终止状态集合,一符号串被识别当且仅当这个\\\\ 符号串让初始状态到终止状态,我们将再下一节学习这种类型的有限状态机。 许多不同类型的有限状态机用来模拟计算,这一节所给的有限状态机是带有输出的有限状态机也称为Mealy机,还有另外一种很重要的带有输出的有限状态机,它的输出只由状态决定。这种状态机就是Moore机。例9.2.7.表明了一个Mealy机是如何用语言识别的,然而,另外一种没有输出的有限状态机也常用于这个用途,没有输出的有限状态机也称有限状态自动机,它有一组终止状态集合,一符号串被识别当且仅当这个符号串让初始状态到终止状态,我们将再下一节学习这种类型的有限状态机。