![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编译器
文章平均质量分 78
纳颜
这个作者很懒,什么都没留下…
展开
-
根据正则表达式创建NFA的Thompson算法 python实现
创建NFA的第一步是解析正则表达式,我看龙书中使用分析树来解析的,在这里卡了一段时间,后来查资料发现Thompson的原论文用的解析法是将正则式从前缀形式转换成后缀形式,对我来讲同样清晰易懂而且好实现,实现的复杂度时间复杂度是O(n)。举例来说,原正则表达式为a.b,a|b,(a|b).c,(a|b)*那么转换后分别为ab., ab|, ab|c和ab|*(符号“.”表示联合,“|”表示或,“*”表示任意)。State(状态)又怎么表示的呢?2.若读取的是操作符,弹出栈中内容,创建操作符NFA,再压入栈。.原创 2022-08-16 19:56:22 · 1834 阅读 · 2 评论 -
KMP算法(失效函数)介绍
代码中 p[j] == p[k] 是这样的情况:这时 k = next[j] ,就是 j 和 k 都已被赋了值的,到 j 这里需要重置了即P[j] 不等于T[i],另外p[0 - (k-1)] == p[(j-k) -(j - 1)] ,"ab"是 P 的前缀字符串"abcab"的“最长的既是真前缀又是后缀的子串"也就是说假如完成了k++,j++的设置,P 的前缀字符串从"abcab"变成"abcabd",而"abcabd"子串的寻找和"abc"子串寻找的结果相同,所以代码是 k = next[k]。...原创 2022-08-05 20:18:29 · 2040 阅读 · 0 评论