Prüft die Collections.sort(list)
ob die list
bereits sortiert ist oder ist es vielleicht O (1) aus einem anderen Grund?
Oder ist es eine gute Idee, eine Flagge sortiert zu haben und sie auf true
/false
nach dem Aufruf sort()
/ein Element auf der Liste hinzufügen?Java - Ruft sort() auf eine bereits sortierte Liste eine O (1) -Operation auf?
Antwort
Wie können Sie feststellen, ob eine Liste sortiert ist, ohne sie anzusehen? Es wird nicht O(1)
sein. Das Ermitteln, ob eine Liste sortiert ist, dauert mindestens O(n)
.
Das würde bedeuten Wenn Collections.sort
müßte um zu überprüfen, ob eine Liste zuerst sortiert wurde, würde jeder Sortiervorgang einen Durchschnitt von O(n) + O(n log n)
nehmen.
Es gibt keine Möglichkeit, es ist O (1), Sie können nicht überprüfen, ob die Sammlung schneller als O (n) sortiert ist. Eine Flagge zu haben sollte in Ordnung sein, aber schwer zu sagen, ohne zu wissen, was genau du machst.
Im Allgemeinen macht das Sortieren einer bereits sortierten Liste es nicht schneller (außer einfache Sortierungen wie bubble sort). In einigen Fällen ist vorsortiert langsamer.
Im Fall von Collections.sort() ist es nicht schneller, eine sortierte Liste zu sortieren.
Eigentlich nicht ganz wahr. iirc Java benutzt Timsort für einige Dinge, die mit Java7 beginnen, und Timsort ist ziemlich gut darin, teilweise sortierte Listen zu sortieren, dh besser als das theoretische 'O (n log n)' – Voo
+1 für vorsortierte langsamer in einigen Fällen –
Tatsächlich hat Java für einige Sortieraufgaben von mergesort zu TimSort gewechselt (benannt nach Python-Entwickler Tim Peters, der es für cpython zuerst implementiert hat).
Während es nicht O (1) ist, ist das Sortieren einer bereits sortierten oder teilweise sortierten Liste mit TimSort effizienter als das Sortieren eines komplett zufälligen Datensatzes (für den späteren Fall gibt es keine Möglichkeit effizienter zu sein als O(n log n)
für Vergleichssorten) , das gilt nicht für nicht zufällige Daten).
Ok, aber die Wahrscheinlichkeit, dass die Person, die fragt, Java 7 verwendet, ist ziemlich niedrig (manche sagen 18% http://blog.jelastic.com/2011/12/07/java-7-adoption-grows-to-18-percent/) –
@vitalik Die Wahrscheinlichkeit, dass zukünftige Leser Java 7 oder später verwenden werden, kann nur von dort aus zunehmen. SO ist als Informationsarchiv gedacht, nicht als Forum. – EJP
@EJP Wenn man bedenkt, dass vitalik meinen Beitrag nicht abgelehnt hat, als er diesen Kommentar gepostet hat, haben Sie versehentlich einen falschen Mausklick gemacht? Sonst bin ich ziemlich überrascht, dass irgendjemand meinen Beitrag ablehnen würde. b2t: Ich denke, solange ich explizit erwähne, dass das nur für Java7 gilt + wie viele Leute welche Version benutzen ist nicht allzu wichtig - 18% sind noch ziemlich viele Leute. – Voo
- 1. Warum hat Heap Sort eine Raumkomplexität von O (1)?
- 2. Eine sortierte Liste suchen?
- 3. Python Sortierliste basierend auf Schlüssel sortierte Liste
- 4. Wie viele Anweisungen werden für eine O (1) -Operation in einer Liste mit n Elementen ausgeführt?
- 5. Valueerror: I/O-Operation auf geschlossene Datei
- 6. Ist O (1) Zugriff auf eine Datenbankzeile möglich?
- 7. Stellen Timeout auf eine Operation
- 8. Java Code Review: Sortieren Sie sortierte Listen in eine einzige sortierte Liste
- 9. bitweise Operation auf eine Liste <bool>
- 10. Ruft self.class.delete eine Klassenmethode auf?
- 11. C# Löscht eine Liste <T> mit Werttypen immer noch eine O (n) Operation?
- 12. Python sort() -Methode auf Liste vs eingebaute sorted() -Funktion
- 13. Meteor - veröffentlicht eine Sammlung auf personalisierte Punktzahl sortierte
- 14. Welche Qt-Containerklasse für eine sortierte Liste?
- 15. Wie "ruft" eine Klasseninstanz in PHP auf?
- 16. Java Bubble sort auf randomisierten ListArray
- 17. Merge Sort auf Objektverknüpfte Liste (aufsteigende Reihenfolge)
- 18. Testkonstruktor ruft eine Methode mit Sinon auf
- 19. O (1) Hash-Lookups?
- 20. Pass eine Blockvariable auf eine Callback-Funktion, die bereits Argumente
- 21. * Dies ruft Konstruktor auf?
- 22. eine JSONObject auf eine Liste mit Flexjson in Java/Android
- 23. Unmanaged C# ruft eine statische Bibliothek auf
- 24. Was ist der effizienteste Weg, einen String in eine bereits sortierte Array-Liste von Strings einzufügen?
- 25. undefinierte Anzahl von Or-Operation auf Liste
- 26. Python: Einfügen in eine Liste schneller als O (N)?
- 27. Begrenzte Funktion ruft Nodejs bei gleicher Operation auf?
- 28. ListBox.FindString Was ist die Worst-Case-Laufzeit? O (n), O (n log n), O (1) & rarr;
- 29. Optimized Bubble Sort (Java)
- 30. Operation auf zwei Liste <>
streng genommen bedeutet O (1) nicht 1 Index :) – unbeli
@unbeli +1 korrigiert meine Antwort. – Aidanc
Und 'O (n) + O (n log n)' ist das gleiche wie 'O (n log n)' :) – unbeli