JavaScript-Objekte als Hashes? Ist die Komplexität größer als O (1)?
Für einige Algorithmus, den ich schrieb vor kurzem dachte ich, dass ein hash wäre hervorragend. Ich dachte, dass ich könnte wahrscheinlich nur verwenden Sie die member-Variablen in einem Objekt als Schlüssel-Wert-Paare. Ich bin nicht sicher, ob dies optimal ist, da ich nicht wirklich weiß, was Los ist hinter den kulissen. Ich habe auch angenommen, dass der V8 macht es anders als andere Umgebungen. Ich weiß allerdings vorstellen, dass suchen-member-Variablen wäre ziemlich schnell (hoffentlich)?
Dass alles gesagt Frage ich mich, ob die Laufzeit-Komplexität von schreiben, Lesen, erstellen und löschen von member-Variablen in JavaScript-Objekte sind alle O(1). Wenn es Unterschiede in der Umwelt (v8 vs andere), was sind Sie?
InformationsquelleAutor der Frage Parris | 2012-09-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE
Chrome löschen, ist nun wirklich speedy; aber update scheint langsamer zu werden, wenn Sie, wie Sie Ansatz 1 Millionen keys.
Okay, ich habe einige Daten. Ich werde sagen, ja, es gibt Unterschiede zwischen den Browsern. Es scheint, dass verschiedene Umgebungen Betreuung über die verschiedenen CRUD-Operationen. Auch die Objekte hashes unter der Haube, da die Leistung wird nicht beeinträchtigt, wenn die Anzahl der Tasten erhöht. Wenn es keine performance-Unterschied (ops/sec) zwischen den 3 Proben dann (glaube ich), dass heißt, es ist ein hash und die Komplexität der operation ist O(1) unabhängig davon, dass es schneller oder langsamer im Vergleich zu anderen Operationen. In anderen Worten, wenn es eine änderung in der test - ops/sec zählen als Schlüssel erhöhen, dann ist es nicht O(1) (dies ist nicht der Fall).
Tests:
http://jsperf.com/objectsashashes/2 (100 keys)
http://jsperf.com/objectsashashes/3 (100k keys)
http://jsperf.com/objectsashashes/ (1 Mio keys)
http://jsperf.com/objects-as-hashes-300-mil (10-Tasten)
Beobachtungen:
Abschließende Bemerkungen:
Obwohl hash['irgendwas'] ist nicht langsamer als hash.etwas, wenn Sie brauchen, um zu verketten, um den Namen Ihres hash-Ihre Leistung wird drastisch reduziert ( http://jsperf.com/member-associative-array-syntax-vs-dot-syntax ), das ist der Grund, warum ich zwischengespeichert, die diese Werte außerhalb des performance-tests vor. Vermeiden Verkettung, wenn möglich. Strings sind unveränderlich in JS, und als ein Ergebnis jede Verkettung erstellt 3 Objekte/"primitive" (string 1, string 2 und die verkettete Zeichenfolge).
InformationsquelleAutor der Antwort Parris
JavaScript-Objekte sind hashes. Ich kann mir nicht vorstellen, jeder vernünftige Umsetzung, wäre es nicht konstant-die Zeit der CRUD-Operationen auf Objekt-Eigenschaften.
Sehen Sie spezifische performance-Probleme bei diesem Ansatz?
InformationsquelleAutor der Antwort Matt Ball