Aufrechterhaltung der Reihenfolge in einer Liste in

15

Das Auftragspflegeproblem (oder "Auftrag in einer Liste pflegen") besteht darin, die folgenden Vorgänge zu unterstützen:

  • singleton: Erstellt eine Liste mit einem Element und gibt einen Zeiger darauf zurück
  • insertAfter: einen Zeiger auf ein Element gegeben, fügt ein neues Element danach ein und gibt einen Zeiger auf das neue Element zurück
  • delete: Mit einem Zeiger auf ein Element wird es aus seiner Liste entfernt
  • minPointer: Wenn Sie zwei Zeiger auf Elemente in derselben Liste geben, wird derjenige zurückgegeben, der sich näher am Anfang der Liste befindet

Ich kenne drei Lösungen für dieses Problem, die alle Operationen in amortisierter Zeit ausführen . Sie alle verwenden die Multiplikation.Ö(1)

Kann die Reihenfolge in einer Liste in amortisierter Zeit beibehalten werden, ohne dass arithmetische Operationen verwendet werden, die nicht in A C 0 sind ?Ö(1)EINC0

Apfel
quelle
Die Multiplikation erfolgte erst kürzlich (seit Pentium III) in . Können wir Lösungen einbeziehen, die Multiplikation verwenden? EINC0
AT
Ich denke nicht, dass das richtig ist. Erstens glaube ich nicht, dass die Multiplikation in . Zweitens glaube ich nicht, dass bestimmte Maschinen, wie der von Ihnen erwähnte Pentium III, etwas mit der Frage zu tun haben, ob die Multiplikation in A C 0 erfolgt . Schließlich sind mir, wie in der Frage gezeigt, offensichtlich mehrere multiplikationsbasierte Algorithmen für dieses Problem bekannt, so dass das Hinzufügen von mehr in einer neuen "Antwort" die Dinge in keiner Weise verbessert. EINC0EINC0
Apfel
Gefunden, wo ich darüber gelesen habe; es ging um Pentium 4, nicht um III; und implementierte keine Multiplikation, sondern arbeitete mit einer neuen Anweisung dieses Prozessors darum herum: M. Thorup, "On AC0 Implementations of Fusion Trees and Atomic Heaps", in Proceedings des vierzehnten jährlichen ACM-SIAM Symposium on Discrete Algorithms, Philadelphia, PA, USA, 2003, S. 699–707.
AT

Antworten: