Ich bin (dummerweise stellt sich heraus) zuversichtlich, dass die Antwort auf diese Frage nein ist. Warum frage ich?
Weil Dr. Aleksandar Prokopec an der EPFL in seinem parallelen Programmierkurs eine Datenstruktur vorstellt, für die er verschiedene Eigenschaften behauptet. Wenn diese Eigenschaften gelten, scheint es mir möglich zu sein, einen ausgeglichenen Binärbaum besser als zu erstellen Zeit.
Ich glaube das nicht, also frage ich mich, wo der Fehler in meinem Denken liegt.
Die Datenstruktur ist die Conc-Tree-Liste . In seiner Standardform sieht es aus wie ein normaler Binärbaum und wird mit einer concat
Operation geliefert, die die Invariante sicherstellt, dass sich der linke und der rechte Teilbaum eines Knotens niemals um mehr als einen in der Höhe unterscheiden. Wie erwartet concat
hat Komplexität.
Es gibt jedoch eine Builder-Variante der Conc-Tree-Liste, die als Append
Liste bezeichnet wird. Diese Variante ermöglicht temporäre Höhenunterschiede in Teilbäumen von mehr als einem. Amortisiert Für diese Variante werden Zeitanhänge beansprucht.
Es scheint also anhängend zu sein Elemente müssen eine Komplexität von haben .
Es ist jedoch ein Merkmal dieser Variante, dass wann immer ist eine Zweierpotenz, die zu einem vollständig ausgeglichenen Binärbaum führt (der alle bisher eingefügten Elemente enthält). Während vorübergehende Ungleichgewichte zulässig sind, wird der Baum bei jeder Potenz von 2 Einfügungen ausgeglichen.
In dieser Variante wird eine neue Klasse von Knoten eingeführt, die als Append
Knoten bezeichnet werden. Diese Knoten, deren Teilbäume zulässig sind, unterscheiden sich in der Höhe um mehr als einen. Jedoch jeder Einfügungen alle diese temporären Knoten werden eliminiert.
Die Wikipedia-Seite beschreibt den Algorithmus ziemlich prägnant (siehe Beschreibung der grundlegenden Datenstruktur und insbesondere der append
Methode).
Also wann ist eine Zweierpotenz, die unsere Kosten für das Einfügen von Elementen betragen und wir haben einen ausgeglichenen Binärbaum erstellt. Zumindest scheint es so.
In einer separaten Frage habe ich effektiv gefragt, ob ich die Anzahl der Schritte für einen Algorithmus für bestimmte Werte von angeben kannzB für , wo ist eine ganze Zahl, reicht dies aus, um die Komplexität für alle Werte von angeben zu können ? "
Ich kann der Antwort von Yuval Filmus entnehmen, dass die Antwort nein ist, aber dass "in vielen Fällen wir erwarten würden monoton sein in . In diesem Fall gilt der Abzug. "
So scheint es mir, dass in diesem Fall beim Einfügen Elemente hat Komplexität Und jeder Elemente Ich habe einen ausgeglichenen Binärbaum, dann müssen die Kosten für die Erstellung ausgeglichener Binärbäume mit diesem Ansatz der Conc-Tree-Variante sein .
Also, was ist hier falsch? Um ehrlich zu sein, kann ich die amortisierten nicht sehenAnhängungszeit für diese Variante beanspruchen. Ich kann sehen, dass Einfügungen oft Kosten verursachenAber wenn man sich ansieht, was mit den temporären Append
Knoten passiert , scheinen mir die gesamten Einfügungskosten amortisiert zu sein.
Wenn dies der Fall ist, ist es nicht überraschend, unseren ausgeglichenen Binärbaum zu erstellen Kosten.
Entschuldigen Sie die lange Frage und entschuldigen Sie, dass Sie nicht näher auf den betreffenden Algorithmus eingegangen sind. Stattdessen können Sie sich auf Wikipedia umschauen.
append
Operation.