- 博客(2)
- 收藏
- 关注
原创 根据正则表达式创建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
2316
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
2564
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人