Am einfachsten zu implementieren Online sortierte Datenstruktur in C

stimmen
1

Ich bin das Scannen eines großen Datenquelle, die derzeit etwa 8 Millionen Einträge pro Eintrag auf Zeichenfolge zu extrahieren, die ich in alphabetischer Reihenfolge will.

Currenlty Ich habe sie in einem Array dann sortieren , einen Index mit ihnen , qsort()die funktioniert gut.

Aber aus Neugier Ich denke an stattdessen jede Zeichenfolge in eine Datenstruktur eingefügt, die sie in alphabetischer Reihenfolge unterhält, wie ich sie aus der Datenquelle zu scannen, zum Teil für die Erfahrung eines emlplementing, zum Teil, weil es schneller fühlen, ohne das Warten auf die Art zu beenden, nachdem der Scan abgeschlossen ist (-:

Welche Datenstruktur wäre die einfachste in C zu implementieren?

AKTUALISIEREN

Um zu klären, ich die einzigen Operationen durchführen müssen, sind ein Element eingefügt und den Index Dumping wenn es fertig ist, durch die ich für jedes Element bedeuten, in der ursprünglichen Reihenfolge eine ganze Zahl Dump, die die Reihenfolge es in ist nach dem Sortieren.

ZUSAMMENFASSUNG

  • Die am einfachsten zu implementieren sind binäre Suchbäume.
  • Selbstausgleich Binärbäumen sind viel besser, aber nicht trivial zu implementieren.
  • Die Insertion kann iterativ durchgeführt werden, aber in Ordnung Traversal für Dumping der Ergebnisse und Post-Order Traversal zum Löschen des Baumes, wenn beide erfordern erfolgt entweder Rekursion oder eine explizite Stack.
  • Ohne Ausgleich Umsetzung läuft geordneter Eingang wird in den degenerierten schlimmsten Fall zur Folge haben, die eine verknüpfte Liste ist. Das bedeutet, tief Bäume, die stark die Geschwindigkeit des Einsatzes Betrieb auswirken.
  • Schlurfen die Eingabe kann leicht brechen geordnete Eingabe erheblich und ist leichter, dass Ausgleich zu implementieren.
Veröffentlicht am 11/04/2011 um 18:23
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
3

Binäre Suchbäume. Oder sich selbst ausgleichSuchBäume. Aber erwarten Sie nicht diejenigen , schneller zu sein als ein richtig dynamischer Array implementiert, da Arrays viel besser Referenzlokalität als Zeigerstrukturen. Auch unausgeglichen BSTs kann "gehen linear", so Ihre gesamte Algorithmus wird O ( n ²), wie quicksort.

Beantwortet am 11/04/2011 um 18:24
quelle vom benutzer

stimmen
0

Sie könnten eine schnellere Sortieralgorithmus, wie wir Timsort oder andere Sortieralgorithmen mit einem nlog (n) im schlechtesten Fall implementieren und es erst seit seinem schnelleren binäre Suche suchen, wenn die Liste sortiert ist.

Beantwortet am 11/04/2011 um 18:29
quelle vom benutzer

stimmen
0

Sie sollten einen Blick auf Trie - Datenstruktur nehmen WikiLink ich das denke , wird dazu dienen , was Sie wollen

Beantwortet am 18/04/2011 um 08:20
quelle vom benutzer

stimmen
2

Sie sind bereits mit dem optimalen Ansatz. Sortieren am Ende wird viel billiger als die Aufrechterhaltung einer Online-Datenstruktur sortiert. Sie können die gleiche O (log N) mit einem rb-Baum erhalten, aber die Konstante wird viel schlimmer ist, nicht signifikant Raum Overhead zu erwähnen.

Dies vorausgeschickt , AVL - Bäume und rb-Bäume sind viel einfacher zu implementieren , wenn Sie nicht brauchen , um Löschung zu unterstützen. Linksgerichtete rb Baum kann in 50 oder so Zeilen Code passen. Siehe http://www.cs.princeton.edu/~rs/talks/LLRB/ (von Sedgewick)

Beantwortet am 19/04/2011 um 05:31
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more