Seja o autômato de correspondência de cadeia para o padrão , ou seja
- para todos os e
com o comprimento do prefixo mais longo de que é um sufixo de , ou seja
.
Agora, deixe a função de prefixo do algoritmo Knuth-Morris-Pratt , que é
.
Como se vê, pode-se usar para calcular rapidamente; a observação central é:
Suponha noções acima e . Para com ou , isso significa que
Mas como posso provar isso?
Para referência, é assim que você calcula :
m ← length[P ]
π[0] ← 0
k ← 0
for q ← 1 to m − 1 do
while k > 0 and P [k + 1] =6 P [q] do
k ← π[k]
if P [k + 1] = P [q] then
k ← k + 1
end if
π[q] ← k
end while
end for
return π
Respostas:
Antes de tudo, observe que, por definição
Vamos investigar e em um esboço:s1 s2
[ fonte ]
Agora assuma ; isso contradiz a escolha máxima de diretamente. Se assumirmos que contradiz o fato de que tanto e são escolhidos no máximo, em particular porque . Como ambos os casos levam a contradições mantém, qeds2>s1 s1 s1>s2 s2 πP(q) πP(q)≥s1−1 s1=s2
Conforme solicitado, uma versão mais elaborada da prova:
Agora temos que mostrar ; fazemos isso mostrando que o oposto leva a contradições.s1=s2
Antes de continuarmos com o outro caso, vejamos que . Observe que, como , temos . Supondo que contradiga imediatamente a escolha máxima de ( está no conjunto é escolhido).πP(q)≥s1−1 P0,s1⊐P0,q⋅a P0,s−1⊐P0,q πP(q)<s1−1 πP(q) s1−1 πP(q)
Como nem nem podem aguentar, provamos que , qeds1>s2 s2>s1 s1=s2
fonte