从数据流<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
010_01101_0_11010_1010_1011_0100_001
注明:这里的“_”仅为看得方便,并属于数据流的一部分。
之中捡出特定序列“011010”。
解:
最后得到的状态转换图如下:
分析:
1--- 对它特定序列 011010 进行划分:
定义检索到 0 时, 数据长度为1 ,状态为a
定义检索到 01 时,数据长度为 2,状态为b
定义检索到 011 时,数据长度为 3,状态为c
定义检索到 0110 时,数据长度为 4,状态为d
定义检索到 01101 时,数据长度为 5,状态为e
定义检索到 011010 时,数据长度为 6,状态为f
---将上面的数据看做是以数据长度为索引的表格:
数据长度 | 标识 | 对应状态 |
1 | 0 | a |
2 | 01 | b |
3 | 011 | c |
4 | 0110 | d |
5 | 01101 | e |
6 | 011010 | f |
2--- 从idle状态开始,逐步分析:
----假设数据流(输入) 按节拍 逐位 从LSB向MSB 方向移入缓冲区
MSB …_|__|__|__|__|__|__|__… LSB
缓冲区数据定义为S(看做是二进制数)。
(1) 若第1个输入的数据为1,则S=1, S或S末尾的(1~6)位都不存在 S!= Q,因此系统继续保留在idle状态; 而当输入的是0时,则S=0, 而且S或S末尾的(1~6)位存在Q=S,那么系统跳至状态a。
(2) 当系统进入了状态a,如果输入的第2个数据为1,则S=01,S或S末尾的(1~6)位存在Q=S(这里S的末2位 = 01标识),那么系统进入状态b; 如果输入的第2个数据为0,则S=00,S或S末尾的(1~6)位存在Q=S (这里S的末1位 = 0标识),则系统进入a状态,即保持。
(3) 一下以此类推,每一次都 依次把S或S末尾的(1~6位 – 因为特定序列只有6位) 与 标识比较(0 ~ 011010)比较,从而确定下一个状态。
------------ 更详细的一个思考过程:
假如此刻在状态d(即S=0110), 当下一个数据是1时,则S=01101,系统进入状态e;
若输入的是0,则S=01100,显然,S=01100是一个新状态,定义为I。
再读取下一个数据*,则S=01100*
如果 *= 0,则S=011000, 然后取S末1尾(即0)与上面的表格比较,得知下一个状态应该是a;
如果 *= 1,则S=011001, 然后
取S末1位(即1)与上面的表格比较,得知并不存在相应的次态; 则要继续比较,
再取S末2位(即01)与上面的表格比较,得知下一个状态是b。 知道次态后,不用再比较下去。
当所有的状态都能回归之后,完成装换图。
文章评论(0条评论)
登录后参与讨论