因此,我知道测试常规语言是否为常规语言的子集是可以确定的,因为我们可以将它们都转换为DFA,计算,然后测试该语言是否为空。小号ř ∩ ˉ 小号
但是,由于这需要转换为DFA,因此DFA以及测试算法可能就输入NFA中的状态数而言呈指数关系。
在多项式时间内有已知的方法吗?总的来说,该问题是否已被证明是Co-NP完整的?
请注意,问题出在Co-NP中,因为而不是接受的单词将是的多项式证明者。
编辑:这是不正确的,因为不能保证这样的单词在状态数上将是多项式。
因此,我知道测试常规语言是否为常规语言的子集是可以确定的,因为我们可以将它们都转换为DFA,计算,然后测试该语言是否为空。小号ř ∩ ˉ 小号
但是,由于这需要转换为DFA,因此DFA以及测试算法可能就输入NFA中的状态数而言呈指数关系。
在多项式时间内有已知的方法吗?总的来说,该问题是否已被证明是Co-NP完整的?
请注意,问题出在Co-NP中,因为而不是接受的单词将是的多项式证明者。
编辑:这是不正确的,因为不能保证这样的单词在状态数上将是多项式。
Answers:
决定NFA中语言包含的问题是 -complete。为了证明这一点,可以很容易地减少NFA的通用性问题(测试),因此,在某种程度上,您必须确定,但您可以即时进行确定。
您对co-NP的观察是错误的(但很好)。确实可以在多项式时间内在证人中检查这样的证人,但是最短的证人本身在输入长度上可能是指数的。由于,因此确定不包含也是 -complete。
为了更仔细地陈述情况,请确定是否为大小的(因为仅需要补码)和是否为大小。
您应该看一下Jean-FrançoisRaskin的论文《有限自动机的反链算法》。
在我们的实验中,基于反链的包容性测试比“传统”方法要好一个或两个数量级。
如果我没记错的话,该算法是在libAMoRE ++库中实现的。
AT&T FSM库是在线上可用的最好,最全面,最先进和高度优化的免费FSM库之一。它完全按照您的描述实现“ fsmdifference”,需要确定的无εFSM来实现。一种想法是在进行差异处理之前最小化一个或两个FSM,这在某些情况下可能会有所帮助。(即确定与最小化是不同的。)此程序包还具有“近似”或“贪婪”最小化,旨在比完全最小化更快。
但是,通过研究类似的问题,我认为,文献中没有出现一些FSM的概括或构建,它们可以通过避免确定步骤(即,在不创建其他确定的FSM的情况下基本上反转NFA)来帮助解决此问题。想法是“平行”遍历NFA边缘,并像标准确定算法一样,跟踪属于当前“超状态”(状态集)的节点集。然后,当且仅当当前超状态节点集“全部不接受”时,NFA补语接受(与接受“任何接受”的确定性构造相反)。
但是,我以前没有看过这篇文章,也没有通过快速的在线搜索看到它。有许多参考文献暗示或暗示,与NFA补充互补一起工作的唯一方法是确定它。
这是两个“附近”参考,可能对某些想法有用。我希望听到任何“更紧密”的消息。您提到您正在从事程序验证,这可能是对该问题进行更直接研究的领域。
[1] 使用Z表示法 Nazir Ahmad Zafar,Nabeel Sabir和Amir Ali 构造不确定的有限自动机的交点