Die Python wiki page on time complexity besagt, dass das Löschen eines Elements O (n) Zeit dauert. Die description of the deque class in the documentation of the collections module besagt, dass "list
Objekte [...] O (n) Speicherbewegungskosten für pop(0)
und insert(0, v)
Operationen verursachen, die sowohl die Größe als auch die Position der zugrunde liegenden Datendarstellung ändern".Warum benötigt Python O (n) Zeit, um das erste Element aus einer Liste zu entfernen?
Warum brauchen Listen O (n) Zeit? Ist eine Liste nicht nur ein paar Elemente oder Zeiger auf Elemente, die physisch nebeneinander im Speicher liegen, zusammen mit einem Zeiger auf den Anfang der Liste? Wenn ja, warum kann der list
-Typ keine popleft
-Methode ähnlich der in collections.deque
haben, die das erste Element in O (1) -Zeit entfernt, indem der Startzeiger der Liste entsprechend inkrementiert wird?
Ich versuche nicht, ein bestimmtes Problem zu lösen. Ich möchte nur meine Neugier befriedigen, warum es so gestaltet ist.
EDIT: Hier ist ein Diagramm, wie meine popleft
Methode funktionieren würde:
Vor popleft
Aufruf:
-------------------------------------------------------------------
| The | quick | brown | fox | jumps | over |
-------------------------------------------------------------------
^
pointer to list
Nach dem Aufruf von popleft
:
-------------------------------------------------------------------
| The | quick | brown | fox | jumps | over |
-------------------------------------------------------------------
^
pointer to list
Vor dem Aufruf an popleft
ist das erste Element der Liste The
, das 2. ist quick
usw. Nach dem Aufruf war der Ort, an dem das erste Element war, ungenutzter Speicher (der leer gelassen oder vom Müll beansprucht werden kann) collector), das neue erste Element ist quick
, das neue zweite Element ist brown
, usw. Es müssen keine großen Datenmengen bewegt werden, und es muss nichts passieren, was O (n) Zeit in Anspruch nimmt.
Ich bin nicht verwirrt über die Terminologie. Ich werde ins Detail gehen, wie meine vorgeschlagene O (1) 'popleft'-Methode in der Frage funktionieren würde. –