Arrays in JavaScript können sehr einfach durch Hinzufügen und Entfernen von Elementen geändert werden. Es maskiert etwas die Tatsache, dass die meisten Spracharrays eine feste Größe haben und komplexe Operationen erfordern, um die Größe zu ändern. Es scheint, dass JavaScript es einfach macht, Array-Code mit schlechter Leistung zu schreiben. Dies führt zu der Frage:
Welche Leistung (in Bezug auf die große O-Zeit-Komplexität) kann ich von JavaScript-Implementierungen in Bezug auf die Array-Leistung erwarten?
Ich gehe davon aus, dass alle vernünftigen JavaScript-Implementierungen höchstens die folgenden großen O's haben.
- Zugang - O (1)
- Anhängen - O (n)
- Voranstellen - O (n)
- Einfügung - O (n)
- Löschen - O (n)
- Tauschen - O (1)
Mit JavaScript können Sie ein Array mithilfe der new Array(length)
Syntax bis zu einer bestimmten Größe vorfüllen. (Bonusfrage: Erstellt ein Array auf diese Weise O (1) oder O (n)) Dies ähnelt eher einem herkömmlichen Array und kann bei Verwendung als Array mit Vorgröße das Anhängen von O (1) ermöglichen. Wenn eine zirkuläre Pufferlogik hinzugefügt wird, können Sie O (1) voranstellen. Wenn ein dynamisch expandierendes Array verwendet wird, ist O (log n) der durchschnittliche Fall für beide.
Kann ich für einige Dinge eine bessere Leistung erwarten als hier angenommen? Ich erwarte nicht, dass irgendetwas in irgendwelchen Spezifikationen beschrieben ist, aber in der Praxis könnte es sein, dass alle wichtigen Implementierungen hinter den Kulissen optimierte Arrays verwenden. Gibt es dynamisch expandierende Arrays oder andere leistungssteigernde Algorithmen?
PS
Der Grund, warum ich mich frage, ist, dass ich einige Sortieralgorithmen erforsche, von denen die meisten davon ausgehen, dass das Anhängen und Löschen O (1) -Operationen sind, wenn ich ihr gesamtes großes O beschreibe.
length
Eigenschaft und das Vorabzuweisen von Speicherplatz sind zwei völlig verschiedene Dinge.
array[5]
auf a new Array(10)
O (1) ist?
.length
aber das war es auch schon.) Arrays unterscheiden sich nicht wesentlich von einfachen Objektinstanzen.