【问题标题】:Time Complexity DFA construction from regex directly直接从正则表达式构建时间复杂度 DFA
【发布时间】:2014-03-18 05:23:05
【问题描述】:

我想知道龙书中直接使用algo 3.36从正则表达式构造DFA的时间复杂度。

我对外部 while 循环会执行多少次感到困惑?就像在算法中提到的 Dstates 一样,它们是否等于正则表达式中的操作数数量?

还有多少工作将在执行等于 |Σ| 的 for 循环中完成次?

谢谢。

【问题讨论】:

  • 这对 SO 来说是一个非常糟糕的问题,再见
  • @nhahtdh 给定的复杂性是通过使用 NFA 进行构造,这将在最坏的情况下导致 2^n 状态,因此 O(2^n) 。我已经要求直接从正则表达式构造
  • @gwillie 简单地说我想知道在 Dragon book 中使用 algo 3.36 直接从正则表达式构造 dfa 的时间复杂度:|
  • @nhahtdh 没有必要通过 NFA,因为我们可以从正则表达式构建语法树并因此使用它.....更多信息我建议您通过龙书中的算法 3.36 ....我知道它的最坏情况复杂度是 2^n 但想知道确切的表达式..

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


【解决方案1】:

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

L = {w ∈ {0,1}*: |w| ≥ n 并且从最后一个符号开始的第 n 个符号是 1}

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

【讨论】:

  • 是的,在最坏的情况下我同意它的 2^n,但正如我提到的,我想知道算法中提到的 Dstates 和正则表达式中的运算符之间是否存在任何关系......我还问了多少工作在for循环中完成
  • @Shubham:不管在其他地方做了什么工作,只要最终的结果需要构建整个DFA,那么总体复杂度就是O(2^n)。我的回答不完整,因为它并没有真正回答你的其他问题。
猜你喜欢
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 2015-12-21
  • 2017-02-09
  • 2018-04-16
  • 2019-04-30
相关资源
最近更新 更多