我有非常大的非确定性有限自动机,我需要将其转换为DFA。
我的意思是说40 000多个州。到目前为止,我已经做了一些实验和编程的默认算法,通过表检索(如描述在这里),但即使是优化后速度很慢,非常消耗内存。我知道一个事实,州的数量可以成倍增长,但是在最小化之后,最终的DFA有大约9000个州,这是可以接受的。
所以我的问题是,是否有某种算法会更快或更友好的存储?
我有非常大的非确定性有限自动机,我需要将其转换为DFA。
我的意思是说40 000多个州。到目前为止,我已经做了一些实验和编程的默认算法,通过表检索(如描述在这里),但即使是优化后速度很慢,非常消耗内存。我知道一个事实,州的数量可以成倍增长,但是在最小化之后,最终的DFA有大约9000个州,这是可以接受的。
所以我的问题是,是否有某种算法会更快或更友好的存储?
Answers:
您是否尝试过Brzozowski的算法?在最坏的情况下,运行时间是指数级的,但是我看到一些参考文献表明它通常表现非常好,尤其是从要转换为DFA并最小化的NFA开始时。
以下文件似乎相关:
它评估了DFA最小化的许多不同算法,包括将它们应用于您以NFA开头并希望将其转换为DFA并将其最小化的情况。
NFA的强连接组件(SCC)分解(将其视为有向图)是什么样的?它是否有许多组件,而所有组件都没有太大?如果是这样,我想知道是否有可能设计一种分而治之的算法,在该算法中,您可以使用单个组件,将其从NFA转换为DFA,然后将其最小化,然后将其替换为新的确定版本。对于单入口组件(在该组件中的所有边均通向单个顶点,即入口顶点),这应该是可能的。我没有立即看到是否可以对任意NFA进行这样的操作,但是如果您检查SCC的结构是什么样,那么您也许能够确定这种方向是否值得探索。
从“确定为DFA /最小化DFA”的原始/长期策略之外,就已知/可用算法而言,这显然不是一个经过充分研究的问题。您似乎表明确定步骤是有问题的步骤,但这当然很典型,因为它具有指数空间/时间更糟的情况。请注意,有几种DFA最小化算法,它们的平均性能差异可能很大。
也被非正式地称为“没有确定性的最小化NFA”。从某种意义上讲,除非本文中显示P = Pspace,否则根本就没有近似算法,这是很难理解的:
但是,本文确实考虑了一些算法的通常很少探索的情况,这些情况并非基于找到确定的DFA 1 st:
我们提出了减少不确定性自动机中状态和转换数量的不同技术。这些技术基于状态集的两个预排序,与包含左,右语言有关。由于它们的精确计算是NP难的,因此我们将重点放在多项式逼近上,这使得NFA都可以减小。
请注意,AT&T FSM库是一个公开可用的程序包/实现,可以一般地尽可能高效地处理大型NFA / DFA转换/最小化等。
它有一个fsmcompact
有时可以满足的策略:
在无法确定换能器或加权受体或其体积变得很大的情况下,可以使用其他优化方法
fsmcompact
。此操作将输入标签,输出标签和成本的每个三元编码为一个新标签,执行经典(未加权受体)确定和最小化,然后将编码后的标签解码回其原始值。这样做的好处是,始终对其进行定义,并且不会沿路径移动输出标签或成本。缺点是结果既不能是确定性的,也不能是最小的。