π 前置関数を使用して、時間 O(m |Σ|) で文字列一致オートマトンの遷移関数 δ を計算するための効率的なアルゴリズムをどのように与えることができますか?
有限オートマトンで遷移関数を計算したい。通常の遷移関数の複雑さは O(m^3|Σ|) です。ここで、m = パターン P の長さ、Σ はアルファベットです。COMPUTE_TRANSITION_FUNCTION(P,Σ)
m = length(P);
for q = 0 through m do
for each character x in Σ
k = min(m+1, q+2); // +1 for x, +2 for subsequent repeat loop to decrement
repeat k = k-1 // work backwards from q+1
until Pk 'is-suffix-of' Pqx;
d(q, x) = k; // assign transition table
end for; end for;
return d;
End algorithm.
π は KMP アルゴリズムで定義された接頭関数です。