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,q⋅a) para todos os eq∈Qa∈Σ

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

σP(w)=max{k∈N0∣P0,k⊐w} .

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

πP(q)=max{k∣k<q∧P0,k⊐P0,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+1≠a , 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 π

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,q⋅a)=: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)≥s1−1s1=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,s2⊐P0,q⋅aP0,s2⊐P0,πP(q)⋅aP0,πP(q)⊐P0,qs2P0,s2P P0,q⋅aP0,s1s1PP0,q⋅a

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−1P0,s1⊐P0,q⋅aP0,s−1⊐P0,qπP(q)<s1−1πP(q)s1−1π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)⋅a⊐P0,q⋅as1>s2s2s1s2

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


Você pode justificar sua resposta para ou ? q=mPq+1≠a

@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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.