Sei der String-Matching-Automat für das Muster , das heißt
- für alle und
mit die Länge des längsten Präfixes von , das ein Suffix von , das heißt
.
Nun lassen die Präfix - Funktion aus dem Knuth-Morris-Pratt - Algorithmus , das heißt
.
Wie sich herausstellt, kann man , um schnell zu berechnen . Die zentrale Beobachtung ist:
Nehmen Sie die obigen Begriffe und . Für mit oder gilt dies
Aber wie kann ich das beweisen?
Als Referenz berechnen Sie auf folgende Weise :
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 π
Antworten:
Beachten Sie zunächst per Definition, dass per Definition
Untersuchen wir und in einer Skizze:s1 s2
[ Quelle ]
Nehmen wir nun an, ; dies widerspricht der maximalen Wahl von direkt. Wenn wir annehmen, widersprechen wir der Tatsache, dass sowohl als auch maximal gewählt werden, insbesondere weil . Da beide Fälle zu Widersprüchen führen, gilt , qeds2>s1 s1 s1>s2 s2 πP.( q) πP.( q) ≥s1- 1 s1=s2
Wie gewünscht, eine ausführlichere Version des Beweises:
Jetzt müssen wir ; Wir tun dies, indem wir zeigen, dass das Gegenteil zu Widersprüchen führt.s1=s2
Bevor wir mit dem anderen Fall fortfahren, lassen Sie uns sehen, dass . Beachten Sie, dass wir haben , weil . Angenommen, widerspricht sofort der maximalen Auswahl von ( befindet sich in der Menge, aus der ausgewählt wird).πP.( q) ≥s1- 1 P.0 ,s1⊐P.0 , q⋅ a P.0 , s - 1⊐P.0 , q πP.( q) <s1- 1 πP.( q) s1- 1 πP.( q)
Da weder noch können, haben wir bewiesen, dass , qeds1>s2 s2>s1 s1=s2
quelle