Ⅰ 编译原理:怎么用子集法将NFA转换成DFA 用图4.16的NFA举例子
这里你要弄清子集法中,每一行,指的是变迁。比如第一行,代表状态0,画一根线到状态1,因此第1个0是指这个变迁的起点状态0,第3个1是指变迁的终点状态1。
同理,第2行是指从状态1出发,有2个变迁,即第一个是状态1指向状态1(自己),第2个变迁是从状态1到状态1和2。
这样第3行就表示如果从状态{1,2}开始,输入是0和1时的变迁分别是什么,依此类推。
你红的圈出来的就是NFA所有可能的状态和状态组合。
Ⅱ 什么是子集构造法
子集构造是NFA(Non-Deterministic Finite Automaton, 非确定有穷自动机)转DFA(Deterministic Finite Automaton)时所使用的用于消除 epsilon-transition(epsilon转换. 那个字符打不出来, 你懂的) 的方法.
其方法如下.
设有NFA的M, 将其转换为DFA的 `M.
M的初始状态的epsilon-closure(epsilon-闭包)作为 `M的初始状态. 而后, 在某个转换上, 设该转换为 a-transition, 那么, 构造 Sa = {t| 对原状态集合S中的一些状态s, 存在通过a-transition到t的转换}. 再构造Sa的闭包 `Sa. 如此一直构造, 直到没有新的状态构造出来为止, 此即子集构造.