前言:需要阅读《算法导论》关于字符串的章节才能知道下面符号的含义
定义偏移(shift)为:成功匹配的的字符串位置前所包含的字符数,比如字符串abcdef, 匹配串为cd, 则偏移量为2,因为字符串abcdef中,cd前面还有a,b两个字符
给定一个模式
P
P
P,定义:
σ
(
x
)
=
a
r
g
max
k
{
k
∣
P
k
⊐
x
}
\sigma(x)=arg\max_{k} \{k \mid P_k \sqsupset x \}
σ(x)=argkmax{k∣Pk⊐x}
π [ q ] = a r g max k { k ∣ k < q , P k ⊐ P q } \pi[q]=arg\max_{k} \{k \mid k<q, P_k \sqsupset P_{q}\} π[q]=argkmax{k∣k<q,Pk⊐Pq}
注意 π [ q ] 不 包 含 自 身 长 度 q \pi[q]不包含自身长度q π[q]不包含自身长度q
重要定理:
定理1:
{
k
∣
k
<
q
,
P
k
⊐
P
q
}
=
π
∗
[
q
]
\{k \mid k<q,P_k \sqsupset P_q\} = \pi^{*}[q]
{k∣k<q,Pk⊐Pq}=π∗[q]
定理2:若
σ
(
X
)
=
q
\sigma (X) =q
σ(X)=q,则有
σ
(
X
a
)
=
σ
(
P
q
a
)
\sigma (Xa)= \sigma (P_{q}a)
σ(Xa)=σ(Pqa)
定理3:若
q
=
m
q=m
q=m 或
q
≠
m
q \neq m
q=m 但
P
[
q
+
1
]
≠
a
P[q+1] \neq a
P[q+1]=a ,则
σ
(
P
q
a
)
=
σ
(
P
π
[
q
]
a
)
\sigma(P_qa) = \sigma(P_{\pi[q]}a)
σ(Pqa)=σ(Pπ[q]a)
重要思想:
去尾部化为子问题,然后再比较末尾值