Änderungen an verlinkten Liste zwei Operationen beinhalten:
- den Knoten Auffinden des neuen Knotens zu
- tatsächlich den Knoten anhängen anhängen, indem Sie die Knoten Zeiger ändert
In verlinkte Liste, die zweite Operation ist eine O(1)
Operation, so dass es sich um die Kosten der ersten Operationen handelt.
Beim Anhängen an den letzten Knoten würden naive Implementierungen der verknüpften Liste die Iterationszeit O(n)
ergeben. Gute Bibliotheken mit verknüpften Listen würden jedoch für die häufigsten Verwendungen und Sonderfälle für den Zugriff auf den letzten Knoten verantwortlich sein. Diese Optimierung würde zu O(1)
Abruf des letzten Elements führen, was insgesamt zu O(1)
Einfügungszeit enden würde.
Wie für die Mitte ist Ihre Analyse korrekt, in der Ortung des Knotens würde auch O(n)
. Bei einigen Bibliotheken wird jedoch eine Methode verfügbar gemacht, bei der anstelle des Index ein Zeiger auf den neuen Knoten verwendet wird (z. B. C++
list
). Dies eliminiert die linearen Kosten, die sich über alle O(1)
ergeben.
Während das Einfügen in die Mitte normalerweise als O(n)
Betrieb betrachtet wird, kann es in einigen Fällen auf O(1)
optimiert werden.Dies ist das Gegenteil der Array-Liste, bei der die Einfügeoperation selbst (die zweite Operation) O(n)
ist, da alle Elemente an höheren Positionen verlagert werden müssen. Dieser Vorgang kann nicht optimiert werden.
Zum Einfügen Eine naive Implementierung einer verketteten Liste würde O(n)
Insertionszeit ergeben. Allerdings würden gute Listenbibliotheksverfasser für die häufigsten Fälle optimieren, so dass sie einen Verweis auf die letzten Elemente behalten (oder eine zirkuläre verkettete Listenimplementierung haben), was zu einer Einfügungszeit von O(1)
führt.
Wie für die Einfügung in die Mitte. Einige Bibliotheken wie die von C++
haben einen vorgeschlagenen Ort zum Einfügen. Sie würden einen Zeiger auf den Listenknoten nehmen, an den der neue angehängt werden soll. Solche Einfügungen würden O(1)
kosten. Ich glaube nicht, dass Sie O(1)
per Index erreichen können.
Dies ist eine Array-Liste, wo Einfügen in die mittleren Kräfte Neuordnung aller Elemente höher als es ist, so muss es eine O(n)
Operation sein.
Wenn die Einfügung in der Mitte der Liste O (1) wäre, würden wir keine Arrays mehr brauchen :). – Li0liQ
Li0liQ: Einer der Vorteile von verknüpften Listen ist, dass Sie Elemente in der Mitte in konstanter Zeit einfügen können, wobei Sie in Arrays alle folgenden Elemente verschieben müssen. – Amnon
@ Li0liQ: Was ist mit konstanter Zeitindexierung? – sykora