Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 最坏情况下的NFA复杂性是O(N*M)还是O(N*M^2)?_Algorithm_Nfa - Fatal编程技术网

Algorithm 最坏情况下的NFA复杂性是O(N*M)还是O(N*M^2)?

Algorithm 最坏情况下的NFA复杂性是O(N*M)还是O(N*M^2)?,algorithm,nfa,Algorithm,Nfa,在最坏的情况下,有向图G(V,E)可能有| V | ^2条边 因为DFS的复杂性是O(| V |+| E |),所以这里将是O(| V | ^2) 那么在最坏的情况下,NFA的复杂度应该是O(N*M^2) 我的理解正确吗 谢谢。在NFA的算法第四构造中,边的数量最多为3M,因此得到的是O(NM)而不是O(NM^2)。我正在阅读算法第四。它提到了一种使用NFA匹配RE的算法,每一轮它都将使用DFS来找出NFAYes的下一个可达状态。你的边界是正确的。推理是不正确的。您需要证明大小为M的regexp

在最坏的情况下,有向图G(V,E)可能有| V | ^2条边

因为DFS的复杂性是O(| V |+| E |),所以这里将是O(| V | ^2)

那么在最坏的情况下,NFA的复杂度应该是O(N*M^2)

我的理解正确吗


谢谢。

在NFA的算法第四构造中,边的数量最多为3M,因此得到的是O(NM)而不是O(NM^2)。

我正在阅读算法第四。它提到了一种使用NFA匹配RE的算法,每一轮它都将使用DFS来找出NFAYes的下一个可达状态。你的边界是正确的。推理是不正确的。您需要证明大小为M的regexp可以生成具有M^2条边的图,并且DFS是确定字符串是否与regexp匹配的适当方法。我认为两者都不是真的。@Anonymous实际上,对于一个大O上界,你只需要证明图最多有O(M^2)条边,如果你有O(M)个状态,情况显然就是这样。当添加一个字符时,DFS用于从一组可能的状态计算下一组可能的状态(如果存在epsilon转换,这是必要的)。
N is the length of string
M is the length of Regular expression.