我正在阅读关于编译器的文章,关于词法分析器(扫描仪)的章节,我对以下声明感到困惑:
对于输入字符串X和正则表达式R,使用非确定性有限自动机查找匹配的复杂性为:
O(len R * len X)
len R
中的复杂性如何是多项式的?
我认为它取决于len R
的指数,因为每当我们有一个可能出现可变次数的字符时(即后跟*
符号),我们必须测试所有可能出现的次数。如果我们有多个字符出现可变次数,我们必须检查所有可能性(通过回溯)。
我哪里错了?
答案 0 :(得分:1)
我们必须检查所有可能性(通过回溯)。
不一定是回溯。 There are many ways to implement an NFA。通过线性移动输入并同时转换到多个状态(将一组活动状态存储在O(1)
- 查找结构中),您将获得完全提到的运行时间 - NFA中的状态数是线性的到正则表达式的长度。