Ich möchte eine doppelt verkettete Liste mit einer Reihenfolge (ein Integer-Attribut) erstellen, so dass die Sortierung nach der Reihenfolge der Reihenfolge ein Array erstellen könnte, das effektiv der verknüpften Liste entsprechen würde.Einfache Bestellung für eine verkettete Liste
given: a <-> b <-> c
a.index > b.index
b.index > c.index
Dieser Index müsste effizient viele Einfügungen handhaben.
Gibt es einen bekannten Algorithmus, um dies zu erreichen? Das Problem ist, wenn die Liste groß wird und die Index-Sequenz gepackt wurde. In dieser Situation muss die Liste gescannt werden, um die Lücke wieder herzustellen. Ich bin mir einfach nicht sicher, wie dies erreicht werden soll. Idealerweise würde es eine Art automatischen Ausgleich geben, so dass diese Kreditaufnahme sowohl schnell als auch selten ist.
Die naive Lösung, alle linken oder rechten Indecies um 1 zu ändern, um Platz für das Insert zu schaffen, ist O (n).
Ich würde es vorziehen, Ganzzahlen zu verwenden, wie ich weiß Zahlen tendenziell weniger zuverlässig in Fließkommazahl, wie sie in den meisten Implementierungen Null erreichen.
Warum oh wieso dlinked Listen? Warum nicht [balancierte Bäume] (https://en.wikipedia.org/wiki/https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree#Implementations)? Kein Problem mit wachsenden/sinkenden, O (log (N)) Operationen. –
"Die naive Lösung, alle linken oder rechten Indezien um 1 zu ändern, um Platz für das Insert zu schaffen, ist O (n)." Wenn Sie wirklich auf einer "dlinked * paged * Lösung" bestehen (aus welchen Gründen auch immer), können Sie, anstatt eine Lücke auf alle Seiten zu verteilen, eine Seite teilen, in die Sie einfügen möchten, aber die Seite hat ihren Füllfaktor erreicht. –
Wie werden neue Artikel in die doppelt verknüpfte Liste eingefügt? Sind sie am Kopf oder am Schwanz eingefügt? Oder ein beliebiger Ort in der Mitte? Beachten Sie, dass das Einfügen eines Elements in die Mitte der doppelt verknüpften Liste O (n) erfordert, es sei denn, Sie führen Zeiger auf die einzelnen Elemente. In diesem Fall würde die Pflege dieser zusätzlichen Zeiger Zeit erfordern. – wookie919