Heim Backend-Entwicklung Python-Tutorial Detaillierte Erläuterung der Strukturtechniken zur Implementierung des Wörterbuchbaum-Trie mithilfe von Python-Code

Detaillierte Erläuterung der Strukturtechniken zur Implementierung des Wörterbuchbaum-Trie mithilfe von Python-Code

Mar 03, 2017 pm 03:48 PM

Der Wörterbuchbaum (Trie) kann einige String->Wert-Korrespondenzen speichern. Im Grunde hat es die gleiche Funktion wie Javas HashMap, bei der es sich um eine Schlüssel-Wert-Zuordnung handelt, mit der Ausnahme, dass der Schlüssel von Trie nur eine Zeichenfolge sein kann.

Die Kraft von Trie liegt in seiner zeitlichen Komplexität. Die Einfügungs- und Abfragezeitkomplexität beträgt jeweils O(k), wobei k die Länge des Schlüssels ist, unabhängig davon, wie viele Elemente in Trie gespeichert sind. Es wird behauptet, dass die Hash-Tabelle O (1) ist, aber bei der Berechnung des Hashs wird sie definitiv O (k) sein, und es gibt auch Probleme wie Kollisionen. Der Nachteil von Trie besteht darin, dass es sehr viel Speicherplatz verbraucht.
Was die Implementierung des Trie-Baums betrifft, können Sie Arrays verwenden oder Zeiger dynamisch zuweisen. Als ich die Frage beantwortete, habe ich der Einfachheit halber Arrays verwendet und den Speicherplatz statisch zugewiesen.
Der Trie-Baum, auch Wortsuchbaum oder Schlüsselbaum genannt, ist eine Baumstruktur und eine Variante des Hash-Baums. Typische Anwendungen sind das Zählen und Sortieren einer großen Anzahl von Zeichenfolgen (aber nicht auf Zeichenfolgen beschränkt), daher werden sie häufig von Suchmaschinensystemen für Statistiken zur Worthäufigkeit von Texten verwendet. Seine Vorteile sind: Es minimiert unnötige Zeichenfolgenvergleiche und bietet eine höhere Abfrageeffizienz als Hash-Tabellen.
Die Kernidee von Trie besteht darin, Raum gegen Zeit zu tauschen. Nutzen Sie das gemeinsame Präfix von Zeichenfolgen, um den Zeitaufwand für Abfragen zu reduzieren und die Effizienz zu verbessern.
Jedes Wort im Trie-Baum wird zeichenweise gespeichert, und Wörter mit demselben Präfix teilen sich Präfixknoten.
Sie können sehen, dass jeder Pfad ein Wort im Baum speichert /ten/inn diese Wörter.

Die Grundeigenschaften des Trie-Baums können wie folgt zusammengefasst werden:
(1) Der Wurzelknoten enthält keine Zeichen, außer dem Wurzelknoten. Jeder Knoten enthält nur ein Zeichen.
(2) Vom Wurzelknoten bis zu einem bestimmten Knoten werden die auf dem Pfad übergebenen Zeichen verbunden, um die dem Knoten entsprechende Zeichenfolge zu bilden.
(3) Alle untergeordneten Knoten jedes Knotens enthalten unterschiedliche Zeichenfolgen.

Eigenschaften
(1) Der Wurzelknoten enthält keine Zeichen, und jeder Knoten außer dem Wurzelknoten enthält nur ein Zeichen.
(2) Vom Wurzelknoten bis zu einem bestimmten Knoten werden die auf dem Pfad übergebenen Zeichen verbunden, um die dem Knoten entsprechende Zeichenfolge zu bilden.
(3) Alle untergeordneten Knoten jedes Knotens enthalten unterschiedliche Zeichenfolgen.

Grundidee (am Beispiel des Buchstabenbaums):
1. Einfügungsprozess
Beginnen Sie für ein Wort an der Wurzel und folgen Sie dem Baum, der jedem Buchstaben von entspricht Das Wort Der Knoten verzweigt sich nach unten, bis das Wort durchlaufen wird, und der letzte Knoten ist rot markiert, was darauf hinweist, dass das Wort in den Trie-Baum eingefügt wurde.
2. Abfrageprozess
Durchlaufen Sie auf ähnliche Weise den Trie-Baum in alphabetischer Reihenfolge der Wörter, beginnend mit der Wurzel. Sobald festgestellt wird, dass keine Knotenmarkierung vorhanden ist, oder die Wortdurchquerung abgeschlossen ist aber der letzte Knoten ist nicht vorhanden. Wenn er rot markiert ist, bedeutet dies, dass das Wort nicht existiert. Wenn der letzte Knoten rot markiert ist, bedeutet dies, dass das Wort existiert.

Anwendung
(1) Worthäufigkeitsstatistik
Platz sparen als Hash direkt verwenden
(2) Suchaufforderung
Präfix eingeben Bei Aufforderung werden Wörter, die
(3) gebildet werden können, als Hilfsstrukturen
wie Suffixbäume, AC-Automaten usw. implementiert.

>Obwohl Python Da es keine Zeiger gibt, können verschachtelte Wörterbücher zum Implementieren von Baumstrukturen verwendet werden. Für Nicht-ASCII-Wörter wird die Unicode-Kodierung zum Einfügen und Suchen verwendet Informationen zu den Strukturtechniken zur Implementierung eines Wörterbuchbaum-Trie mithilfe von Python-Code finden Sie auf der chinesischen PHP-Website!

#coding=utf-8 
class Trie: 
  root = {} 
  END = '/' 
  def add(self, word): 
    #从根节点遍历单词,char by char,如果不存在则新增,最后加上一个单词结束标志 
    node = self.root 
    for c in word: 
      node=node.setdefault(c,{}) 
    node[self.END] = None 
 
  def find(self, word): 
    node = self.root 
    for c in word: 
      if c not in node: 
        return False 
      node = node[c] 
    return self.END in node
Nach dem Login kopieren
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Apr 01, 2025 pm 05:09 PM

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Apr 02, 2025 am 07:18 AM

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Apr 01, 2025 pm 11:15 PM

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Apr 02, 2025 am 07:15 AM

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Was sind reguläre Ausdrücke? Was sind reguläre Ausdrücke? Mar 20, 2025 pm 06:25 PM

Regelmäßige Ausdrücke sind leistungsstarke Tools für Musteranpassung und Textmanipulation in der Programmierung, wodurch die Effizienz bei der Textverarbeitung in verschiedenen Anwendungen verbessert wird.

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Apr 01, 2025 pm 10:51 PM

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen an? Uvicorn ist ein leichter Webserver, der auf ASGI basiert. Eine seiner Kernfunktionen ist es, auf HTTP -Anfragen zu hören und weiterzumachen ...

Wie erstelle ich dynamisch ein Objekt über eine Zeichenfolge und rufe seine Methoden in Python auf? Wie erstelle ich dynamisch ein Objekt über eine Zeichenfolge und rufe seine Methoden in Python auf? Apr 01, 2025 pm 11:18 PM

Wie erstellt in Python ein Objekt dynamisch über eine Zeichenfolge und ruft seine Methoden auf? Dies ist eine häufige Programmieranforderung, insbesondere wenn sie konfiguriert oder ausgeführt werden muss ...

Was sind einige beliebte Python -Bibliotheken und ihre Verwendung? Was sind einige beliebte Python -Bibliotheken und ihre Verwendung? Mar 21, 2025 pm 06:46 PM

In dem Artikel werden beliebte Python-Bibliotheken wie Numpy, Pandas, Matplotlib, Scikit-Learn, TensorFlow, Django, Flask und Anfragen erörtert, die ihre Verwendung in wissenschaftlichen Computing, Datenanalyse, Visualisierung, maschinellem Lernen, Webentwicklung und h beschreiben

See all articles