2016-03-31 8 views
0

Gegeben ein Text t [1 ... n] und k Muster p1, p2, ... pk jeweils der Länge m, n = 2m, aus dem Alphabet [0, Sigma-1]. Entwerfen Sie einen effizienten Algorithmus, um alle Orte in t zu finden, an denen eines der Muster pjs übereinstimmt.String Matching Algorithmus Design

Also habe ich eine Zeichenfolge t = "1 2 3 4 5 2 2 9" und das Muster p = "4 5 2 2". Ich weiß, dass es m + 1 Orte geben wird, an denen ich ein Muster finden kann (entweder von "1 2 3 4", "2 3 4 5", etc ...).

Dann haben wir k Zeichen in dem Muster, so dass das bigO out zu O (k (m + 1)) kommt.

Mein Algorithmus wäre, die Zeichenfolge zu durchsuchen, die jedes Zeichen mit den Zeichen in dem Muster überprüft. Das führt mich zu Wiederholungen für m + 1 Standorte.

Hoffentlich erkläre ich es richtig. Ich möchte nur wissen, ob ich es richtig mache und ob es irgendwelche Fehler in meiner Logik gibt. Vielen Dank!

+0

Mehrere Muster. Ist das https://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_algorithm? – mcdowella

Antwort

1

Mein Algorithmus wäre, die Zeichenfolge zu durchsuchen, die jedes Zeichen mit den Zeichen im Muster überprüft. Das wird mich k Iterationen für m + 1 Standorte führen.

Das bedeutet für jedes Muster, können Sie es tun O (m + 1), oder?

Obwohl es Algorithmen gibt, die diese Leistung erreichen können, ist Ihre Brute Force nicht. Sie haben m + 1 Standorte und für jeden Standort müssen Sie m Zeichen überprüfen, so dass die Gesamtkomplexität für jedes Muster O (m (m + 1)) ist.

+0

Ich bin ein wenig verloren auf, was Sie mit Ihrer Frage meinen. Ich versuche nicht, O (m + 1) zu erreichen, sondern O (k (m + 1)) oder O (m (m + 1)) (grundsätzlich dasselbe). Willst du sagen, mein brutaler Weg wäre nicht O (k (m + 1))? –

+1

@ m.o Ich meine für jedes Muster ist es O (m (m + 1)), Sie haben k Muster, die Summe würde O (k (m (m + 1))). Also ist O (k (m + 1)) nicht in roher Gewalt erreichbar. – HenryLee

+0

Oh, ich verstehe. Kannst du mir helfen zu verstehen, wie ich O (k (m + 1)) erreichen würde? Ich weiß nicht, wie ich das sonst noch machen kann. –