2012-04-14 2 views
2

Ich implementiere Lempel-Ziv-Komprimierung und eine Frage springt mir in den Sinn.Suche nach dem längsten Präfix in einem Wörterbuch

Gegeben ein 'Wörterbuch' und eine Zeichenkette. Ich möchte in der Lage sein, das längste Präfix der Zeichenfolge zu berechnen, die im Wörterbuch enthalten ist.

das heißt gegeben Strings:

0 : AABB 
1 : ABA 
2 : AAAB 

und die Query-String ‚AABBABA‘ Ich möchte in der Lage sein, die einen Lookup zu tun, das gibt ‚0‘ sollte auf die Länge der in der Zeit linear erfolgen das Präfix.

Als nächstes möchte ich in der Lage sein, das neue Präfix 'AABBAB' dem Wörterbuch in konstanter Zeit hinzuzufügen.

Gibt es einen Standard und einen einfachen Weg/Algorithmus dafür?

Meine ursprüngliche Idee war, einen Standart-N-Wege-Baum mit einer Liste von Zeigern zu bauen und nur diese zu suchen?

+1

Bedeutet "lineare Zeit", dass die Komplexität einer Wörterbuchsuche auch unabhängig von der Alphabetgröße S sein soll? Der "Standard-n-Weg" -Baum kann aus den Geräuschen davon bis zu S ausgehende Kanten pro Knoten haben. – jogojapan

+0

@jogojapan: Sie sind richtig, ich meine linear in Bezug auf die Länge. und für Konstante, wenn sie im Alphabet linear sind ;-) –

Antwort

3

Sie beschreiben eine einfache trie Suche, außer dass Sie einen Blattknoten auch dann zurückgeben würden, wenn es zu viele Zeichen gibt.

Nicht sicher, was Sie mit einem n-Wege-Baum denken, aber höchstwahrscheinlich ist es genau das gleiche, da es die offensichtliche Lösung ist: v). Wenn Sie effizienter sein wollen, können Sie verschiedene Arten von Versuchen betrachten.

+0

Wie funktioniert das Hinzufügen des neuen Präfix 'AABBAB' in konstanter Zeit in einem einfachen Suchtrie? – jogojapan

+1

@jogojapan: indem man den Knoten zurückhält und nur den Schwanz hinzufügt :-) –

+0

Ok. Zugegeben, ich interpretiere "einfacher Trie" als einen, der einzelne Zeichen auf den Übergängen hat. Vielleicht mein Fehler. – jogojapan