文字列マッチングアルゴリズムの2:有限自動機を利用する


下一篇:string matchingアルゴリズムの一つ(Naive and Rabin_Karp)
有限自動機:
有限自動機Mは5要素群(Q,q 0,A)である.Σ, δ), 次のようになります.
・Qは状態の有限集合である
・q 0∈Q初期状態
・A⊆Qは受容状態の集合である
·         Σ 制限された入力アルファベット
·         δ Qから× Σ Qへの関数をMの遷移関数(transition function)と呼ぶ
有限自動機は、状態q 0から開始する、入力文字列の1文字を読み込むたびに、
状態qにおいて入力文字aが読み込まれると、状態qからδ(q, a).
その現在の状態qが(受入れ状態の集合)Aに属する場合、自動機Mは、これまで読込んだ文字列を受入れているという.
受信入力がないことを拒否された入力と呼ぶ.
有限自動機Mは1つの関数を導出することができるφ, 終態関数と呼ばれます.φ(w)は、スキャン文字列wの後にMが終了したときの状態である.
φ(ε)
=
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},初期状態q 0,状態mは一意の受け入れ状態である.
l任意の状態qと文字aに対して、遷移関数δの定義は次のとおりです.δ(q, a) = σ(Pqa). (ここでPqはPのプレフィックスP[1.q])
すなわち、状態qを現在一致する長いとする.
例えばパターンP=ababaca.テキストT=abababacaba.
ありますδ(5,b)=4、状態q=5のときにオートマチックから1つのbを読み込むとPqb=abababとなり、abababの接尾辞がPに一致する最長接頭辞はP 4=abababとなる.
(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" im 
   
       Θ(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の接頭辞であり、wwがxの接尾辞であればw
《Introduction to Algorithms》- CLRS