我正在开发一个将非确定性有限状态自动机 (NFA) 转换为确定性有限状态自动机 (DFA) 的程序。为此,我必须计算 NFA 中每个具有 epsilon 转换的状态的 epsilon 闭包。我已经想出了一种方法来做到这一点,但我总是认为我首先想到的通常是做某事效率最低的方法。
这是我如何计算简单的 epsilon 闭包的示例:
转换函数的输入字符串:格式为 startState,symbol = endState
EPS 是一个 epsilon 转换
1,每股收益 = 2
结果在新状态 { 12 }
现在显然这是一个非常简单的例子。我需要能够从任意数量的状态计算任意数量的 epsilon 转换。为此,我的解决方案是一个递归函数,它通过查看它有一个 epsilon 转换到的状态来计算给定状态的 epsilon 闭包。如果该状态具有(一个)epsilon 转换,则在 for 循环中递归调用该函数,以获取尽可能多的 epsilon 转换。这将完成工作,但可能不是最快的方法。所以我的问题是:在 Java 中计算 epsilon 闭包的最快方法是什么?