Ich implementiere eine Trie in Python. Bis jetzt über zwei ich verschiedene Methoden gekommen, um sie umzusetzen:Speicher Effiziente Datenstruktur für Trie Implementierung
- eine Klasse Knoten verwenden (ähnlich Knoten in C++ struct) mit Datenelementen -
char - zum Speichern von Zeichen
is_end - Ende des Wortes zu speichern (wahr oder falsch)
prefix_count - Öffnungs Anzahl der Worte mit dem aktuellen Präfix
Kind - Knotentyp dict (zum Speichern der anderen Knoten das heißt für 26 Alphabete)
class Node(object):
def __init__(self):
self.char = ''
self.word = ''
self.is_end = False
self.prefix_count = 0
self.child = {}
- ein Wörterbuch mit allen Daten zu speichern.
words = {'foo', 'bar', 'baz', 'barz'}
{'b': {'a': {'r': {'_end_': '_end_', 'z': {'_end_': '_end_'}}, 'z': {'_end_': '_end_'}}}, 'f': {'o': {'o': {'_end_': '_end_'}}}}
, die eine effiziente und Standard-Datenstruktur ist, die für Traversal und andere Trie-Operationen auf großen Datenmenge von Wörtern beide Speicher effizient und schnell ist?
https://github.com/kmike/marisa-trie –
Wie planen Sie, Objekte von 'Node' in' self.child' zu referenzieren, wenn man bedenkt, dass dies ein Wörterbuch ist? Wenn Sie es tatsächlich als "dict" behalten und irgendwie "Node" -Objekte bezeichnen, sehe ich, dass beide Methoden die gleiche Zeitkomplexität haben, die erste jedoch mehr Raumkomplexität hat. Und wenn Sie "self.child" als eine Liste bezeichnen, dann könnte die erste etwas langsamer sein. – hyades
Danke für die Antwort. Jedes untergeordnete Element in Node wird ein anderes Objekt vom Typ Node haben, wodurch es zu einem n-stufigen Baum [email protected] – divyum