Conexão entre a função de prefixo KMP e o autômato de correspondência de cadeias

7

Seja o autômato de correspondência de cadeia para o padrão , ou sejaAP=(Q,Σ,δ,0,{m})PΣm

  • Q={0,1,,m}
  • δ(q,a)=σP(P0,qa) para todos os eqQaΣ

com o comprimento do prefixo mais longo de que é um sufixo de , ou sejaσP(w)Pw

σP(w)=max{kN0P0,kw} .

Agora, deixe π a função de prefixo do algoritmo Knuth-Morris-Pratt , que é

πP(q)=max{kk<qP0,kP0,q} .

Como se vê, pode-se usar πP para calcular δ rapidamente; a observação central é:

Suponha noções acima e aΣ . Para q{0,,m} com q=m ou Pq+1a , isso significa que

δ(q,a)=δ(πP(q),a)

Mas como posso provar isso?


Para referência, é assim que você calcula πP :

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 π
Prumo
fonte
3
Você pode fornecer um pouco mais de detalhes? Qual é o padrão? Qual é precisamente a função prefixo - eu não vi uma função prefixo no link que você forneceu? O autômato é determinístico ou não determinístico?
Dave Clarke
3
Não é essa a definição da função de transição KMP? Você pode achar essas notas úteis (mas consulte a nota de rodapé 1).
6119 JeffE
Eu editei a pergunta com a função prefixo do KMP
Bob
11
Portanto, sua pergunta é basicamente como provar que o código acima calcula a função de prefixo do KMP.
Rgrig 7/05
2
@ Rafael: Acho a pergunta editada muito menos legível.
JeffE 16/05

Respostas:

3

Antes de tudo, observe que, por definição

  • δ(q,a)=σP(P0,qa)=:s1 e
  • δ(πP(q),a)=σP(P0,πP(q)a)=:s2 .

Vamos investigar e em um esboço:s1s2

esboço
[ 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>s1s1s1>s2 s2πP(q)πP(q)s11s1=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

  • Suponha . Note-se que porque e por definição de . Portanto, - um prefixo de e um sufixo de - é maior que , que é por definição de o prefixo mais longo de esse é um sufixo de . Isso é uma contradição.s2>s1P0,s2P0,qaP0,s2P0,πP(q)aP0,πP(q)P0,qs2P0,s2P P0,qaP0,s1s1PP0,qa

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)s11P0,s1P0,qaP0,s1P0,qπP(q)<s11πP(q)s11πP(q)

  • Suponha . Acabamos de mostrar e lembre-se de que . Portanto, contradiz a escolha máxima de ( está no conjunto em que é escolhido).s1>s2|P0,πP(q)a|s1P0,πP(q)aP0,qas1>s2s2s1s2

Como nem nem podem aguentar, provamos que , qeds1>s2s2>s1s1=s2

Rafael
fonte
Você pode justificar sua resposta para ou ? q=mPq+1a
@CO: O que você quer dizer com "justificar"? Essa é apenas uma condição na declaração que garante que o "prefixo mais longo de P que é um sufixo de w" seja usado.
Raphael