Chinaunix首页 | 论坛 | 博客
  • 博客访问: 162495
  • 博文数量: 24
  • 博客积分: 1205
  • 博客等级: 少尉
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-21 13:41
个人简介

codeqq的ChinaUnix博客

文章分类

全部博文(24)

文章存档

2012年(1)

2011年(1)

2010年(4)

2009年(18)

我的朋友

分类:

2009-11-22 13:23:13

一个非确定自动机( NFA) 在读入符号串之后,并不确切地知道自动机处于哪个状态。但可以肯定一定处于状态集中的某一状态。该状态集记做 {q1,q2,…qk} 。而一个等价的确定自动机( DFA) 读入同样的 w 一定处于某个确定的状态上。这样,都是读入同样的 w DFA 到达某一个状态,而 NFA 到达某一个状态集。由 w 的任意性,可将 NFA 的所有的状态集和 DFA 的状态一一对应起来。这种对应的前提就是能识别同样的输入串。即 L(M1)=L(M2)

 

       显然,后一个状态集是依赖于前一个状态集的,是在前一个状态集的基础上,(其内任意结点)经过同一条路径到达的。下面是一个简单的例子:

   NFA to DFA_1.gif


可以看出,其核心是将 NFA 状态集归并为 DFA 中的状态。在 NFA 中,无论是从 1 4 ,还是 1 5 ,作为集合来讲都是集合 1 到集合 2 ,最为重要得是经过的条件都是 a 。因而从识别语言的效果是一样的。这使得这些弧合并成为可能。

考虑集合覆盖的情况。



 NFA to DFA_2.gif

一个结点属于第一个集合又同时属于第二个集合。这种情况不一定好理解。但如果从路径的历史的角度进一步区分,即不同的时间经过同一个结点,将其看成是不同的状态。按照这种时空的角度进一步区分,得到右图。这和图 1 是类似的。

 

再来看看带有终态结点的情况:

   NFA to DFA_3.gif


ab abb 均为该 NFA 识别的句子,其转换如下:

      

 

I a

Ib

A{1,2}

{3}

Φ

B{3}

Φ

{3,4}

C{3,4}

Φ

{3,4}

 

从某种意义上说。 NFA 中的状态 3 DFA 中被分离成两部分,当首次到达 3 时应该是状态 B ,而第二次以后再到达 3 则应该属于状态 C

根据规则, C{3,4} DFA 的终态,但在 NFA 中,只有 4 为终态, C 中仍然有 3 为非终态,若有路径 1 à 3 à 3 映射到 DFA 中也是 A à B à C ,何解?

  这里面最关键的是:对任意一个句子,总可以在两个图中分别找到一条路径,形成对应关系。并不是说 NFA 中的每条路径都要和 DFA 中的每条路径一一对应。

 

当识别句子 ab 时,选择由 3 直接到达 4 的路径。当识别句子 abb 时,则在状态 3 循环一次再到达 4

现在设想,通过 1 à 3 à 3 经过的路径也是 ab 。但此时并未到达终态。可以说,在到达 C 中的 3 时,必然选择了两个 b 以上的句子。

而这样的路径与选择句子有关系。

对于 NFA 能识别的句子,在 DFA 中也能识别。

对于 NFA 不能识别的句子,在 DFA 中也不能识别。

阅读(14028) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~