Der schnellste Weg, eine minimale Hamming-Distanz zu einem beliebigen Teilstring zu finden?

Angesichts einer langen SchnurL und eine kürzere SaiteS (Die Einschränkung ist, dassL. Länge muss> = seinS.length), möchte ich den minimalen Hamming-Abstand zwischen findenS und ein beliebiger Teilstring vonL mit einer Länge vonS.Länge. Nennen wir dazu die FunktionminHamming(). Zum Beispiel,

minHamming(ABCDEFGHIJ, CDEFGG) == 1.

minHamming(ABCDEFGHIJ, BCDGHI) == 3.

Wenn Sie dies auf die offensichtliche Weise tun (indem Sie jeden Teilstring von L aufzählen), benötigen Sie O (S. Länge *L.Länge) Zeit. Gibt es eine clevere Möglichkeit, dies in sublinearer Zeit zu tun? Ich suche das selbeL mit mehreren verschiedenenS Strings, so dass einige komplizierte Vorverarbeitung zu tunL einmal ist akzeptabel.

Bearbeiten: Die modifizierte Boyer-Moore wäre eine gute Idee, außer dass mein Alphabet nur 4 Buchstaben (DNA) ist.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage