Zeit und Geschwindigkeitskomplexität einstellen

8

Ich aktualisiere Algorithmen und Datenstrukturen und habe ein paar Fragen sowie Aussagen, die ich gerne überprüfen würde.

ArrayList - O (1) (size, get, set, ...), O (n) - Operation hinzufügen.
LinkedList - Alle Operationen O (1) (einschließlich add ()), außer zum Abrufen des n-ten Elements, das O (n) ist. Ich nehme an, die Operation size () läuft auch in O (1), oder?

TreeSet - alle Operationen O (lg (N)). Die Operation size () benötigt O (lg (n)), richtig?

HashSet - alle Operationen O (1), wenn die richtige Hash-Funktion angewendet wird.
HashMap - alle Operationen O (1), die zu HashSet gehören.

Weitere Erklärungen sind sehr willkommen. Vielen Dank im Voraus.

    
Anton K. 09.07.2011, 12:47
quelle

2 Antworten

14

ArrayList.add() ist amortisiert O (1). Wenn der Vorgang keine Größenänderung erfordert, ist O (1). Wenn eine Größenänderung erfordert, ist es O (n), aber die Größe wird dann so erhöht, dass die nächste Größenänderung für eine Weile nicht mehr auftritt.

Aus dem Javadoc :

  

Die Additionsoperation wird in der amortisierten konstanten Zeit ausgeführt, dh das Hinzufügen von n Elementen erfordert O (n) Zeit. Alle anderen Operationen laufen (grob gesagt) linear ab. Der konstante Faktor ist im Vergleich zu dem der LinkedList-Implementierung gering.

Die Dokumentation ist in Bezug auf die Performance-Analyse im Allgemeinen ziemlich gut für Java-Sammlungen.

Beim O (1) für Hashalgorithmen geht es nicht darum, nur eine "richtige" Hash-Funktion anzuwenden - selbst mit einer sehr guten Hash-Funktion könnten Sie immer noch Hash-Kollisionen bekommen. Die übliche Komplexität ist O (1), aber natürlich kann sie O (n) sein, wenn alle die Hashes zufällig kollidieren.

(Darüber hinaus werden die Kosten für das Hashing als O (1) gezählt - in Wirklichkeit, wenn Sie beispielsweise Strings hashen, kann jeder Aufruf von hashCode in der Länge des Strings O (k) sein.)

    
Jon Skeet 09.07.2011, 13:02
quelle
8

Besuchen Sie die folgenden Links. Es wird dir helfen, deine Zweifel auszuräumen.

Javascript is GOD 09.07.2011 13:13
quelle

Tags und Links