Ich weiß nicht, ob dies der richtige Ort ist, um nach Algorithmen zu fragen. Mal sehen, ob ich Antworten bekomme ... :)
Wenn etwas unklar ist, erkläre ich gerne die Dinge.
Ich habe gerade einen Trie in Python implementiert. Allerdings schien ein Teil etwas komplizierter zu sein als er sollte (als jemand, der Einfachheit liebt). Vielleicht hatte jemand ein ähnliches Problem?
Mein Ziel war es, die Anzahl der Knoten zu minimieren, indem ich das größte gemeinsame Präfix eines Unter-Tries in seiner Wurzel speichere. Zum Beispiel, wenn wir die Wörter stackoverflow, stackbase und stackbased hatten, würde der Baum ungefähr so aussehen:
[s]tack
[o]verflow ______/ \_______ [b]ase
\___ [d]
Beachten Sie, dass man immer noch davon ausgehen kann, dass die Kanten ein Zeichen haben (das erste Zeichen des Kindknotens).
Find-Abfrage ist einfach zu implementieren. Einfügen ist nicht schwer, aber etwas komplexer als ich möchte.. :(
Meine Idee war es, die Schlüssel nacheinander ein zu fügen (ausgehend von einem leeren Trie), indem ich zuerst nach dem einzufügenden Schlüssel k suchte (Find(k)), und dann die Knoten lokal an der Stelle umgruppierte/aufteilte, an der das Suchverfahren endet. Es ergeben sich 4 Fälle: (Nehmen Sie k als den Schlüssel, den wir einfügen möchten, und k' als den Schlüssel des Knotens, an dem die Suche endete)
- k ist identisch mit k'
- k ist ein "richtiges" Präfix von k'
- k' ist ein "richtiges" Präfix von k
- k und k' haben ein gemeinsames Präfix, aber keiner der Fälle (1), (2) oder (3) tritt auf.
Es scheint, dass jeder der Fälle einzigartig ist und daher unterschiedliche Modifikationen des Tries impliziert. ABER: Ist es wirklich so komplex? Fehlt mir etwas? Gibt es einen besseren Ansatz?
Danke :)