时间复杂度直接从正则表达式构建DFA

时间:2014-02-18 12:35:58

标签: regex compiler-construction runtime time-complexity dfa

我想直接使用龙书中的算法3.36来了解DFA构造的时间复杂度。

我对外循环执行多少次感到困惑?和algo中提到的Dstates一样,它们是否与正则表达式中的操作数相等?

此外,在 for 循环中将执行多少工作,执行等于|Σ|时间?

谢谢。

1 个答案:

答案 0 :(得分:1)

构造的复杂性仍然是O(2 n )。考虑in this post所描述的最坏情况示例:

  

L = {w∈{0,1} *:| w | ≥n且最后一个符号的第n个符号为1}

对应于该语言的正则表达式是(0 + 1)* 1(0 + 1)...(0 + 1),其中尾随部分重复n-1次。时间复杂度仍然是O(2 n ),因为构造的DFA中的状态数是O(2 n )(对应于a的后缀数) L)中的单词。