离散数学 09.02 带有输出的有限状态机

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),SI,Of,gs0.M=(S,I,O,f,g,s0)fg
例 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.19.2.2S={s0,s1,s2,s3},I={0,1},O={0,1},fg

例 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.2S={s0,s1,s2,s3},I={0,1},O={0,1},fg

表9.2.2
状态fg
输入
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}
图09-02 表9.2.2所示有限状态机的状态图

例9.2.3.给出状态图9.2.3所示的有限状态机的状态表。
图9.2.3有限状态机
解:状态表如表9.2.3所示。

表9.2.3
状态fg
输入
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=x1x2xk,s0s1,s1=f(s0,x1),s2,s2=f(s1,x2),,y=y1y2yk,y1=g(s0,x1)s0s1y2=g(s1,x2)s1s2yj=g(sj1,xj),j=1,2,,kg(x)=yyx

例 9.2.4. 对 于 图 9.2.3 所 示 的 有 限 状 态 机 , 如 果 输 入 是 101011 , 找 出 对 应 的 输 出 是 什 么 ? 例9.2.4.对于图9.2.3所示的有限状态机,如果输入是101011,找出对应的输出是什么? 9.2.4.9.2.3101011?
解 : 输 出 是 001000 。 连 续 状 态 和 输 出 如 表 9.2.4 所 示 。 解:输出是001000。连续状态和输出如表9.2.4所示。 0010009.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.x1x2xk,:0x1x2xk1
解 : 我 们 把 这 个 延 迟 器 构 造 成 有 两 个 输 入 , 即 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所示。 01s0,01s1,s2,1s10s2,s00s11s20x1x2xk,0x1x2xk19.2.4
图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. (xnx1x0)(yny1y0)x0y0z0c0,01x1y1c0z1c1,nxnyncn1zncn,cnzn+1xnyn0(zn+1)s00()s1,100,01,10,11()s1,01s100+1+1=(10)29.2.5.
图9.2.5 加法器的有限状态机

例 9.2.7. 在 一 些 编 码 方 案 中 , 如 果 一 个 信 息 中 连 续 出 现 3 个 1 , 那 么 接 收 者 就 直 到 出 现 了 传 输 错 误 , 构 造 一 个 有 限 状 态 机 当 且 仅 当 最 后 收 到 的 三 个 字 节 都 是 1 的 时 候 , 它 的 输 出 是 1 。 例9.2.7.在一些编码方案中,如果一个信息中连续出现3个1,那么接收者就直到出现\\\\ 了传输错误,构造一个有限状态机当且仅当最后收到的三个字节都是1的时候,它的输\\\\ 出是1。 9.2.7.3111
解 : 这 个 状 态 机 有 三 个 状 态 , 初 始 状 态 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当且仅当至今读到的输入串具有指定的性质,语言识别是有限状态\\\\ 机的一个重要应用。 s01s111s211s0s1,11s1s2,1s210s0,11s2131.09.2.711111
图9.2.7 语言识别器

许 多 不 同 类 型 的 有 限 状 态 机 用 来 模 拟 计 算 , 这 一 节 所 给 的 有 限 状 态 机 是 带 有 输 出 的 有 限 状 态 机 也 称 为 M e a l y 机 , 还 有 另 外 一 种 很 重 要 的 带 有 输 出 的 有 限 状 态 机 , 它 的 输 出 只 由 状 态 决 定 。 这 种 状 态 机 就 是 M o o r e 机 。 例 9.2.7. 表 明 了 一 个 M e a l y 机 是 如 何 用 语 言 识 别 的 , 然 而 , 另 外 一 种 没 有 输 出 的 有 限 状 态 机 也 常 用 于 这 个 用 途 , 没 有 输 出 的 有 限 状 态 机 也 称 有 限 状 态 自 动 机 , 它 有 一 组 终 止 状 态 集 合 , 一 符 号 串 被 识 别 当 且 仅 当 这 个 符 号 串 让 初 始 状 态 到 终 止 状 态 , 我 们 将 再 下 一 节 学 习 这 种 类 型 的 有 限 状 态 机 。 许多不同类型的有限状态机用来模拟计算,这一节所给的有限状态机是带有输出的有\\\\ 限状态机也称为Mealy机,还有另外一种很重要的带有输出的有限状态机,它的输出\\\\ 只由状态决定。这种状态机就是Moore机。例9.2.7.表明了一个Mealy机是如何用语言\\\\ 识别的,然而,另外一种没有输出的有限状态机也常用于这个用途,没有输出的有限\\\\ 状态机也称有限状态自动机,它有一组终止状态集合,一符号串被识别当且仅当这个\\\\ 符号串让初始状态到终止状态,我们将再下一节学习这种类型的有限状态机。 MealyMoore9.2.7.Mealy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值