字符串匹配(string matching)算法之二:利用有限自动机
来源:互联网 发布:重生漫威之我是矩阵 编辑:程序博客网 时间:2024/05/16 06:08
上一篇:字符串匹配(string matching)算法之一 (Naive and Rabin_Karp)
有限自动机:
一个有限自动机M是一个5元组(Q, q0, A, Σ, δ), 其中:
· Q是状态的有限集合
· q0 ∈ Q 初始状态
· A ⊆ Q 是一个接受状态的集合
· Σ 有限的输入字母表
· δ 是从Q × Σ 到Q的函数, 称为M的转移函数(transition function )
有限自动机开始于状态q0,每次读入输入字符串的一个字符.
如果在状态q时读入输入字符a,则它从状态q变为δ(q, a).
当其当前状态q属于(接受状态的集合)A时, 则说自动机M接受了迄今为止所读入的字符串.
没有被接受的输入称为被拒绝的输入.
有限自动机M可以推导出一个函数φ, 称为终态函数。φ(w)是M在扫描字符串w后终止时的状态。
φ(ε)
=
q0,
φ(wa)
=
δ(φ(w), a) for w ∈ Σ*, a ∈ Σ.
因此, M接受字符串w当且仅当φ(w) ∈ A
字符串匹配自动机
给定模式P[1 ‥ m], 定义辅助函数σ数相应P的后缀函数.
函数σ是一个从Σ*到{0, 1, . . . , m}上的映射:
σ(x)是x的后缀且是p的最长前缀的长度.
σ(x) is the length of the longest prefix of P that is a suffix of x:
σ(x) = max {k : Pk ⊐ x}.
例如模式P = ab, σ(ccaca) = 1, and σ(ccab) = 2
对一个长度为m的模式P来说, σ(x) = m 当且仅当 P ⊐ x (P是x的后缀).
给定模式P[1..m], 其对应的字符串匹配自动机的定义如下:
l 状态集Q为{0, 1, …, m}, 初始状态q0, 状态m是唯一的接受状态.
l 对任意的状态q和字符a, 变迁函数δ的定义为: δ(q, a) = σ(Pqa). (其中Pq是P的前缀P[1..q])
也就是把状态q设为当前已匹配的长度.
例如模式P=ababaca. 文本T=abababacaba.
有δ(5, b) = 4, 如果从状态q=5时自动机读入一个b, 则Pqb=ababab, 于是ababab的后缀匹配P的最长前缀为P4 = abab.
(The longest prefix of P that is also a suffix of ababab is P4 = abab)
//字符串匹配自动机
FINITE-AUTOMATON-MATCHER(T, δ, m)
1 n ← length[T]
2 q ← 0
3 for i ← 1 to n
4 do q ← δ(q, T[i]) //δ函数其实是一张表,预先计算出所有值,需要时查询
5 if q = m
6 then print "Pattern occurs with shift" i – m
匹配时间复杂度Θ(n).
//下面计算出δ函数
COMPUTE-TRANSITION-FUNCTION(P, Σ)
1 m ← length[P]
2 for q ← 0 to m
3 do for each character a ∈ Σ
4 do k ← min(m + 1, q + 2)
5 repeat k ← k - 1
6 until Pk ⊐ Pqa
7 δ(q, a) ← k
8 return δ
时间复杂度O(m3 |Σ|)..还存在更快的过程。
附录:
用Σ* 表示用字母表Σ中的所有有限长度的字符串的集合
长度为0的空字符串用ε表示,ε也属于Σ*
字符串前缀 后缀
如果某个字符串 y ∈ Σ*,使得x=wy ,则称w是x的前缀, 记为w ⊏ x 。 如果w是x的后缀,记为w ⊐ x
《Introduction to Algorithms》- CLRS
- 字符串匹配(string matching)算法之二:利用有限自动机
- 字符串匹配(string matching)算法之二:利用有限自动机
- 算法-字符串匹配(String Matching)-(2)-有限自动机
- 【算法】利用有限自动机进行字符串匹配
- 字符串匹配之有限自动机&kmp算法
- 字符串匹配算法之:有限状态自动机
- 字符串匹配算法——利用有限自动机进行匹配
- 字符串匹配之有限自动机
- 算法——字符串匹配之有限自动机算法
- 利用有限自动机进行字符串匹配
- 利用有限自动机进行字符串匹配
- 利用有限自动机进行字符串匹配
- 字符串匹配算法 之 基于DFA(确定性有限自动机)的字符串模式匹配算法
- 字符串匹配算法 之 基于DFA(确定性有限自动机)的字符串模式匹配算法
- Java实现算法导论中有限自动机字符串匹配算法
- 有限自动机字符串匹配_KMP算法计算状态转换表
- 字符串匹配的FA(有限状态自动机)算法
- 字符串匹配(String Matching)
- PictureStudio开发笔记04-工具栏的动态更新及其它
- 有幸观看了《变形金刚》的首映
- 使用 EJB 组件你需要了解些什么呢?
- SAX解析xml学习笔记[1]
- StringBuffer使用
- 字符串匹配(string matching)算法之二:利用有限自动机
- 二叉树--基本概念
- 格物为一,立志为首
- javascipt,js文件如何调用jsp变量
- 网络游戏性能测试五步曲(Link_近期持续更新)
- 如何识别具有领导潜质的员工?
- 事件Event
- Liva视频Show
- 如何计算java对象占用的内存