Ich habe einen Tri-Tree geschrieben, der für die Implementierung von Hochgeschwindigkeitswörterbüchern in D-Sprache und Python verwendet werden kann

Was ist ein Versuchsbaum?

Kennen Sie die Datenstruktur namens Trie-Baum? Tri-Tree ist eine Datenstruktur, mit der Hochgeschwindigkeitswörterbücher implementiert werden können. Die Implementierung mit einer Datenstruktur namens LOUDS hat den Vorteil, dass der Baum mit sehr wenig Speicher dargestellt werden kann. Tri-Tree wird verwendet, um das japanische Wörterbuch im Speicher zu halten, beispielsweise bei der Kana-Kanji-Konvertierung (japanische Google-Eingabe usw.).

Der Tri-Tree hat eine solche Form. trie tree (Die Abbildung stammt aus Wikipedia)

Was es von anderen Bäumen unterscheidet, ist, dass die "Zweige" des Baumes beschriftet sind.

Wie kann ich das als Wörterbuch verwenden? Lassen Sie uns nach "in" suchen. Es ist einfach. Alles was Sie tun müssen, ist i-> n zu folgen. Sie können "5" als Suchergebnis abrufen. Lassen Sie uns nach "Gasthaus" suchen. Alles was Sie tun müssen, ist von der aktuellen "5" Position nach unten zu gehen. Als Ergebnis kann "9" abgerufen werden.

Merkmale des Tri-Baums

Kann mit hoher Geschwindigkeit suchen

Das Tolle an diesem Versuchsbaum ist, dass Sie sehr schnell suchen können. In einem Tri-Tree ist die Suchgeschwindigkeit proportional zur Größe des zu suchenden Schlüssels. Und es ist nicht proportional zur Größe des __ Baums! __ __

Angenommen, Sie implementieren ein japanisches Wörterbuch mit einem Tri-Tree. Die Suche nach dem 12-stelligen "Waraukado ni Fukukitaru" im japanischen Wörterbuch dauert etwa 4 (= 12/3) Mal so lange wie im 3-stelligen "Warau". Wenn Sie jedoch dasselbe Wort nachschlagen, unabhängig davon, ob es 100 Wörter oder 1 Million Wörter im Wörterbuch enthält, ändert sich die Suchgeschwindigkeit theoretisch nicht. Es ist wunderbar.

Reduzieren Sie verschwenderische Suchvorgänge

Wenn Sie nach einer Zeichenfolge suchen, die einen gemeinsamen Teil hat, können Sie unnötige Suchvorgänge reduzieren, indem Sie die Suche von der Mitte aus neu starten. Als ich beispielsweise früher nach "inn" gesucht habe, konnte ich die Suchergebnisse für "inn" schnell finden, indem ich die Suche vom Knoten "5" im Ergebnis der Suche nach "in" neu startete.

Implementierung durch LOUDS

Das Implementieren eines Tri-Tree, ohne mit Strukturen und Zeigern darüber nachzudenken, verbraucht viel Speicher. Das Gerät friert ein, wenn der Speicher zu voll ist, um hängen zu bleiben. Daher verwenden wir eine Datendarstellungsmethode namens LOUDS. Mit LOUDS kann ein Knoten nur durch 2 Bits dargestellt werden. Ein Baum mit 11 Knoten wie dem am Anfang gezeigten kann nur durch 23 Bits dargestellt werden und passt in eine lange Typvariable.

Ich möchte LOUDS hier erklären, aber da Erklärung der prägnanten Datenstruktur LOUDS sehr einfach zu verstehen war, werde ich es Ihnen geben. ..

Code

Der Code ist unten. Implementiert in D-Sprache bzw. Python. github.com/IshitaTakeshi/Louds-Trie Ich wollte viele Kommentare schreiben, daher denke ich, dass Sie dies verstehen können, indem Sie die Erklärung von LOUDS im obigen Link lesen und dann den Code lesen. Wenn Sie Fragen oder Bedenken haben, kommentieren oder teilen Sie uns dies bitte auf Twitter mit. Wir werden Ihnen dann antworten.

Boxed Edition

Es kann vom D-Sprachpaket-Management-System DUB verwaltet werden. DUB-Seite Quellcode

Recommended Posts

Ich habe einen Tri-Tree geschrieben, der für die Implementierung von Hochgeschwindigkeitswörterbüchern in D-Sprache und Python verwendet werden kann
Ich habe eine generische Python-Projektvorlage erstellt
Verstehen Sie die Wahrscheinlichkeiten und Statistiken, die für das Fortschrittsmanagement mit einem Python-Programm verwendet werden können
Ein Memo, das ich schnell in Python geschrieben habe
Funktionen, die in der for-Anweisung verwendet werden können
Ich habe eine Klasse in Python3 und Java geschrieben
Ich möchte eine Prioritätswarteschlange erstellen, die mit Python (2.7) aktualisiert werden kann.
Einfache Programminstallation und automatische Programmaktualisierung, die in jeder Sprache verwendet werden kann
Skripte, die bei der Verwendung von Bottle in Python verwendet werden können
Kann mit AtCoder verwendet werden! Eine Sammlung von Techniken zum Zeichnen von Kurzcode in Python!
Ich habe ein Tool erstellt, um automatisch ein Zustandsübergangsdiagramm zu generieren, das sowohl für die Webentwicklung als auch für die Anwendungsentwicklung verwendet werden kann
Ein Timer (Ticker), der im Feld verwendet werden kann (kann überall verwendet werden)
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
Neue Funktionen in Python 3.9 (1) - Der Summensatzoperator kann im Wörterbuchtyp verwendet werden.
Zusammenfassung der Standardeingabe von Python, die in Competition Pro verwendet werden kann
Ich habe es gemacht, weil ich JSON-Daten möchte, die in Demos und Prototypen frei verwendet werden können
Code und Lehren für Funktionen, die spezielle Windows-Ordner in Python3-ctypes öffnen
Ich habe die Jumbo-Lotterie zum Jahresende mit Python gekauft und analysiert, die in Colaboratory ausgeführt werden kann
Einfaches Auffüllen von Daten, die in der Verarbeitung natürlicher Sprache verwendet werden können
Ich habe ein Diagramm wie R glmnet in Python für die spärliche Modellierung mit Lasso geschrieben
++ und-können nicht zum Inkrementieren / Dekrementieren in Python verwendet werden
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
[Python3] Code, der verwendet werden kann, wenn Sie ein Bild in einer bestimmten Größe ausschneiden möchten
Klasse für PYTHON, die ohne Kenntnis von LDAP betrieben werden kann
Ich habe versucht, eine Klasse zu erstellen, mit der Json in Python problemlos serialisiert werden kann
Ich habe PyQCheck, eine Bibliothek, die QuickCheck mit Python ausführen kann, in PyPI registriert.
Persönliche Notizen zu Pandas-bezogenen Vorgängen, die in der Praxis verwendet werden können
Beachten Sie, dass ich den Algorithmus der kleinsten Quadrate verstehe. Und ich habe es in Python geschrieben.
So installieren Sie die Python-Bibliothek, die von Pharmaunternehmen verwendet werden kann
Ich habe in Python ein Tool erstellt, das mit der rechten Maustaste auf eine Excel-Datei klickt und diese für jedes Blatt in Dateien unterteilt.
Zusammenfassung der statistischen Datenanalysemethoden mit Python, die im Geschäftsleben verwendet werden können
Visualisierung von geografischen Informationen von R und Python, die von Power BI ausgedrückt werden können
Richten Sie einen FTP-Server ein, der sofort erstellt und zerstört werden kann (in Python).
Ein Mechanismus zum Aufrufen von Ruby-Methoden aus Python, der in 200 Zeilen ausgeführt werden kann
Grundlegende Algorithmen, die bei Wettkampfprofis eingesetzt werden können
Um Japanisch mit Python in der Docker-Umgebung verwenden zu können
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
Hinweise zu Python-Kenntnissen, die mit AtCoder verwendet werden können
ANTs Bildregistrierung, die in 5 Minuten verwendet werden kann
Kann bei Wettkampfprofis eingesetzt werden! Python-Standardbibliothek
Ich habe python3.4 in .envrc mit direnv geschrieben und es zugelassen, aber ich habe einen Syntaxfehler erhalten
Installieren Sie Mecab und CaboCha auf ubuntu16.04LTS, damit es aus der Python3-Serie verwendet werden kann
So richten Sie einen einfachen SMTP-Server ein, der lokal in Python getestet werden kann
Ich habe ein grobes Ansible-Modul geschrieben, mit dem Sie Virtualenv verwenden können, indem Sie Pythonz installieren.
[Django] Feldnamen, die für das Benutzermodell, die Benutzerregistrierung und die Anmeldemethoden verwendet werden können
[Python3] Code, der verwendet werden kann, wenn Sie die Größe von Bildern Ordner für Ordner ändern möchten
[Atcoder] [C ++] Ich habe ein Testautomatisierungstool erstellt, das während des Wettbewerbs verwendet werden kann
Da ImageDataGenerator nicht mehr verwendet werden kann, eine Geschichte zum Erstellen einer Datenerweiterungsklasse für Tensorflow> = 2.0
[Python] Ein Programm, um die Anzahl der Äpfel und Orangen zu ermitteln, die geerntet werden können
Goroutine (parallele Steuerung), die im Feld eingesetzt werden kann
Ich habe versucht, "ein Programm, das doppelte Anweisungen in Python entfernt"
Goroutine, die im Feld verwendet werden kann (errgroup.Group Edition)
Erstellen Sie den Code, der in Python "A und vorgeben B" ausgibt
Ich habe eine Klasse in Python erstellt und versucht, Enten zu tippen
Ich habe ein Skript geschrieben, das das Bild in zwei Teile teilt
[Python] Zeichnen Sie mit Plotly Höhendaten auf eine sphärische Oberfläche und zeichnen Sie einen Globus, der rund und rund gedreht werden kann
Ich habe Python auf Japanisch geschrieben
Erstellen Sie ein Wörterbuch in Python
[Für Anfänger] Baseball-Statistiken, die in 33 Minuten und 4 Sekunden gespeichert werden können, und PyData ~ mit Yojima Steel