Ich muss Listen von über 100.000 Wörtern lexikografisch zusammenführen und sortieren. Ich mache es derzeit mit einer leicht modifizierten Blasensortierung, aber bei O (n^2) dauert es eine ganze Weile. Gibt es schnellere Algorithmen zum Sortieren von Wortlisten? Ich benutze Python, aber wenn es eine Sprache gibt, die damit besser umgehen kann, bin ich offen für Vorschläge.Lexikografische Sortierung der Wortliste
Antwort
Alle O(nlogn)
sorting algorithm tun wird es wahrscheinlich besser, dann Blase Art, aber sie werden O(nlogn * |S|)
jedoch sein, kann das Sortieren Strings in O(n*|S|)
geschehen, wo |S|
die Länge der durchschnittlichen String, eine trie verwendet, und ein einfach DFS.
High-Level-Pseudocode:
1. create a trie from your collection.
2. do a DFS on the trie generated, and add each string
to the list when you reach terminal node.
Kennen Sie gute (effiziente) Trie-Implementierungen in Python? – Cameron
@Cameron: Ich bin nicht wirklich ein nativer Python-Benutzer, also nicht. Aber ich glaube, dass es existiert, es ist viel zu häufig, und Python ist viel zu weit verbreitet, um zu glauben, dass es dafür keine Open-Source-Implementierung gibt. – amit
Verwenden Sie die integrierte in sort()
Liste Methode:
>>> words = [ 'baloney', 'aardvark' ]
>>> words.sort()
>>> print words
['aardvark', 'baloney']
Es verwendet eine O(n lg(n))
Art , die Timsort (.., Die eine merge-Art geändert wird, ich glaube, es ist sehr für die Geschwindigkeit abgestimmt) .
Wie bereits in den Kommentaren out, dies auf die Anzahl der Elementvergleiche Bezug nimmt, nicht auf die Anzahl von Low-Level-Operationen. Da die Elemente in diesem Fall Zeichenfolgen sind und der Vergleich von zwei Zeichenfolgen min{|S1|, |S2|}
Zeichenvergleiche erfordert, ist die Gesamtkomplexität O(n lg(n) * |S|)
, wobei |S|
die Länge der längsten Zeichenfolge ist, die sortiert wird. Dies gilt jedoch für alle Vergleichssorten. Die tatsächliche Anzahl der Operationen hängt von den Kosten der Elementvergleichsfunktion für die Art der zu sortierenden Elemente ab. Da alle Vergleichsarten die gleiche Vergleichsfunktion verwenden, können Sie diese Feinheit ignorieren, wenn Sie die algorithmische Komplexität dieser Sorten untereinander vergleichen.
irgendwelche Vergleiche Sortieralgorithmen sind 'O (nlogn * | S |)' für Strings, da jeder Vergleich op ist nicht 'O (1) ' – amit
@it: True, obwohl '| S |' ist im Allgemeinen ziemlich klein im Vergleich zu 'n' für Wörter. Versuche sind großartig, aber sie (effizient) zu konstruieren ist schwierig, während 'sort()' eine eingebaute ist. – Cameron
@amit: sie müssen nicht sein; String-Gleichheitstests können in 'O (1)' Zeit durchgeführt werden, wenn die Sprache String-Interning durchführt. – ninjagecko
- 1. Lexikografische Reihenfolge in C
- 2. Wortliste aus Wordnet extrahieren
- 3. Zufällige Wortliste Ausgabe
- 4. Python Wortliste Permutation
- 5. Spezielle Regex-Regel für Wortliste
- 6. Freie Wortliste zur programmgesteuerten Verwendung?
- 7. Anzahl der Instanzen des Texts "x" in der Wortliste
- 8. Generieren einer Wortliste in C++
- 9. Android-Spracherkennung (im Such-Widget) mit der angegebenen Wortliste
- 10. Erstellen Wortliste ohne Zeichen in der charset Neuanordnung
- 11. three.js Sortierung der Laderessourcen
- 12. Platzsparende Datenstruktur zum Speichern einer Wortliste?
- 13. Regular Expression nicht eine Wortliste enthalten
- 14. Was ist der Unterschied zwischen externer Sortierung und interner Sortierung?
- 15. Was ist der Unterschied zwischen Bucket-Sortierung und Radix-Sortierung?
- 16. Meteor Sortierung der Sammlung Abonnieren
- 17. Sortierung der Farben mit jquery
- 18. Radix Sortierung mit der Warteschlange
- 19. Sortierung der Eigenschaften des Objekts
- 20. Komponiert Sortierung der Template-Parameter
- 21. SlickGrid-Auswahlprobleme bei der Sortierung
- 22. StackOverflowError während der externen Sortierung
- 23. Überspringen der Sortierung der Tabelle in phpmyadmin
- 24. Sortierung ohne Sortierung mit Sortierung (Liste, Schlüssel = Str.Loer)
- 25. Verknüpfen Sie automatisch Schlüsselwörter innerhalb der Seiten Texte aus der Wortliste
- 26. Datenbank Sortierung vs Programmatic Java Sortierung
- 27. Javascript Sortierung nach SQL Server Sortierung
- 28. Wie man von der Sortierung der Zahlen zur alphabetischen Sortierung in C++ geht
- 29. Android-Kontakte: Falsche lokalisierte Sortierung/Sortierung
- 30. Lucene.net 2.9.2 Sortierung (Sortierung funktioniert nicht)
jede Art tun würde. – soulcheck
* In-place, das ist, wenn der Speicher eingeschränkt ist – soulcheck