Zeit, die Komplexität von Single-Link-Liste Einfügen und löschen
Ich bin ein bisschen verwirrt über die Zeit, die Komplexität der verketteten Listen. In diesem Artikel hier es besagt, dass einfügen und löschen in einer verknüpften Liste ist O(1). Ich wollte wissen, wie das möglich ist ? Es ist davon auszugehen, dass die forward-und next-Zeiger sind bekannt ? Wäre das nicht Doppelt verkettete Liste dann ? Ich würde es begrüßen, wenn jemand könnte dies klären . Und wie die Zeit, die Komplexität von insertion/deletion der einfach verkettete Liste O(1) ?
- Fügen Sie die word sortiert in die Liste ein, und die Komplexität wird schnell Rampe. Ohne die Sorge um das "wo" insertion stattfindet, nur Verklemmen etwas auf ein Ende der Liste ist klar O(1). Wenn man etwas in einer bestimmten Position in der Liste ist O(1) haben Sie direkten Zugang auf den Zeiger, muss direkt neu verdrahtet, um den neuen Knoten (d.h. der Einfügepunkt).
Du musst angemeldet sein, um einen Kommentar abzugeben.
In einfach verknüpfte Listen, sowohl für einfügen und löschen, müssen Sie einen Zeiger auf das element vor das einfügen/löschen Punkt. Dann alles klappt.
Beispiel:
Für viele Anwendungen ist es problemlos möglich, den Vorgänger des Elements, das Sie derzeit auf der Suche, die durch Ihren Algorithmus, um zu erlauben, für dynamisches einfügen und löschen in konstanter Zeit. Und natürlich kann man immer einfügen und löschen an der Vorderseite der Liste in O(1), das es ermöglicht, eine stack-like (LIFO) Verwendung Muster.
Löschen ein Element, wenn Sie nur wissen, dass der Zeiger auf das Element ist in der Regel nicht möglich in O(1). EDIT: Als codebeard demonstriert, wir kann einfügen und löschen, indem Sie Sie nur zu wissen, einen Zeiger auf das einfügen/löschen Punkt. Es umfasst das kopieren der Daten aus dem Nachfolger, so dass bis zur Festsetzung der
next
Zeiger des Vorgängers.next
Zeiger. Es spielt keine Rolle, welche. Seine das Ding, das als Verweis auf den Zielknoten. Wenn das, was Sie gemeint (und ich wünschte, ich könnte den Aufwärtstrend dieses wieder nur für die Nutzung des "vorletzten"), dann sind wir Total auf der gleichen Seite.Ja, es ist vorausgesetzt, dass Sie bereits wissen, den Ort, an dem Sie einfügen möchten die Daten.
Angenommen, Sie haben einige Artikel
p
in der Liste, und Sie möchten fügen Sie ein neues elementnew
nachp
in der Liste:Alternativ nehme an, das Sie einfügen möchten
new
vorp
. Dies kann noch getan werden, in O(1) Zeit:Wie für das löschen von Elementen in einer herkömmlichen, einzeln verkettete Listen, es ist nicht unbedingt O(1)!
Es ist O(1) für das löschen von allen Elementen außer dem letzten element. Wenn Sie versuchen, löschen des letzten Elements in eine einfach verkettete Liste, Sie müssen wissen, das element, bevor es (das erfordert O(N) Zeit-vorausgesetzt, Sie wusste es nicht vor).
Löschen das Element
p
:Vielleicht ist das Verhältnis zu den delete-und insert-operation für array.
Und es ist eine Voraussetzung, dass Sie wissen, die Position, wo zum einfügen oder löschen.
In der Reihe, wenn Sie möchten, einfügen oder löschen eines Elements an der Position
pos
, sollten Sie die anderen Elemente nach der positionpos
, so ist die KomplexitätO(N)
.Aber in der Liste, wenn Sie führen Sie den gleichen Vorgang, brauchen Sie nicht zu berücksichtigen, die andere Elemente, so ist die Komplexität
O(1)
.