为什么要学习有限自动机?
不知道各位读者在了解正则表达式的时候有没有产生过这样一个问题:为什么我们必须用正则表达式?有没有代替正则表达式的东西?正则表达式的核心原理是什么?
要解答这个问题,就必须要了解有限自动机,这是正则表达式的核心。
什么是有限自动机?
有限自动机实际上是一个识别器(recognizer),它提供一个状态转移表,即在当前状态下,接受一个新的输入后,系统应该转移到什么状态。用语言描述显得有些晦涩,下面我们来看一个具体的例子。
假定要查找的字符串为P=”ababaca”, 被查找的文本为T=”abababacaba”。一次读入T的一个字符,用S表示当前读入的T的字符。那我们需要做的就是,寻找最长的P的前缀,使其可以构成S的后缀,我们把匹配上的P的前缀长度记作k。于是就能得到下面这个序列。
P = ”ababaca”
T = ”abababacaba”
- S= a \color{red}{a} a, k = 1, P[1] a \color{red}{a} ababaca
- S= a b \color{red}{ab} ab, k = 2, P[1,2] a b \color{red}{ab} ababaca
- S= a b a \color{red}{aba} aba, k = 3, P[1,2,3] a b a \color{red}{aba} ababaca
- S= a b a b \color{red}{abab} abab, k= 4, P[1,2,3,4] a b a b \color{red}{abab} ababaca
- S= a b a b a \color{red}{ababa} ababa, k = 5, P[1,2,3,4,5] a b a b a \color{red}{ababa} ababaca
- S=ab a b a b \color{red}{abab}