Ich unterrichte einen Kurs über Datenstrukturen und werde Anfang nächster Woche Spreizbäume behandeln. Ich habe das Papier über Spreizbäume oft gelesen und bin mit der Analyse und der Intuition hinter der Datenstruktur vertraut. Ich kann jedoch keine solide Intuition für die potenzielle Funktion finden, die Sleator und Tarjan in ihrer Analyse verwenden.
Die Analyse arbeitet , indem jedes Element in dem Baum eine beliebige Gewichtung zuweisende , dann die Formateinstellung eines Knotens die Summe der Gewichte der Knoten in dem Unterbaum verwurzelt zu sein . Sie nehmen dann das Protokoll dieses Werts, um den Rang des Knotens zu erhalten, also ist . Schließlich wird die potenzielle Funktion des Baums als die Summe der Ränge aller Knoten definiert.x r ( x ) r ( x ) = log s ( x )
Ich verstehe, dass diese potenzielle Funktion korrekt funktioniert und ich kann der Analyse folgen, aber ich verstehe nicht, warum sie dieses Potenzial wählen würden. Die Idee, jedem Knoten eine Größe zuzuweisen, ist für mich sinnvoll, denn wenn Sie die Größen zusammenfassen, erhalten Sie die gewichtete Pfadlänge des Baums. Ich kann jedoch nicht herausfinden, warum sie beschlossen haben, die Protokolle der Gewichte zu nehmen und diese stattdessen zusammenzufassen - ich sehe keine natürliche Eigenschaft des Baums, der dies entspricht.
Entspricht die mögliche Funktion des Spreizbaums einer natürlichen Eigenschaft des Baums? Gibt es einen bestimmten Grund außer "es funktioniert", dass sie dieses Potenzial wählen würden? (Ich bin besonders neugierig, weil in diesem Kurssatz erwähnt wird, dass die "Analyse schwarze Magie ist. Keine Ahnung, wie sie entdeckt wurde".)
Vielen Dank!
quelle
Antworten:
Wie lässt sich das Potenzial von Sum-of-Logs ermitteln?
Betrachten wir den BST-Algorithmus , der für jeden Zugriff auf Element nur Elemente im Suchpfad von , der Vorher-Pfad genannt wird, in einen Baum umordnet, der Nachher-Baum genannt wird. Für jedes Element , lassen und die Größe der Teilstruktur bei verwurzelt sein vor und nach der Umlagerung ist. So und kann iff unterscheiden .x P x a s ( a ) s ' ( a ) a s ( a ) s ' ( a ) a ∈ PA x P x a s(a) s′(a) a s(a) s′(a) a∈P
Darüber hinaus ordnet immer wieder viele Elemente im Suchpfad neu an. Nennen wir diese Art von Algorithmus "lokalen" Algorithmus. Zum Beispiel ist splay tree lokal. Es werden jeweils nur maximal 3 Elemente nach Zick, Zick und Zack neu angeordnet.A
Jetzt hat jeder lokale Algorithmus, der "viele" Blätter im Nachbaum erzeugt, wie der Spreizbaum, die folgende nette Eigenschaft.
Dies können wir an der Änderung des Suchpfads ablesen. Das Mapping ist eigentlich ganz natürlich. In diesem Artikel , Eine globale geometrische Ansicht des Spreizens , wird genau beschrieben, wie die obige Beobachtung zu sehen ist.
Nachdem diese Tatsache bekannt ist, ist es sehr natürlich, das Potenzial für die Protokollsumme zu wählen. Weil wir die mögliche Änderung der Typ-1-Elemente nutzen können, um die gesamte Umlagerung zu bezahlen. Darüber hinaus müssen wir für Elemente anderer Art die mögliche Änderung höchstens logarithmisch bezahlen. Daher können wir den Logarithmus zu fortgeführten Anschaffungskosten ableiten.
Ich denke, der Grund, warum die Leute denken, dass dies "schwarze Magie" ist, ist, dass die vorherige Analyse die gesamte Änderung des Suchpfads nicht "entfaltet" und sieht, was wirklich in einem Schritt passiert. Stattdessen zeigen sie die Potentialänderung für jede "lokale Transformation" und zeigen dann, dass diese Potentialänderungen magisch teleskopierbar sind.
PS Das Papier zeigt sogar eine gewisse Einschränkung des Potentials für die Protokollsumme. Das heißt, man kann die Erfüllbarkeit des Zugriffs-Lemmas über die Summe der Protokolle nur für den lokalen Algorithmus nachweisen.
Interpretation des Summenpotentials
Es gibt eine andere Möglichkeit, das Potenzial von BST in Georgakopoulos und McClurkins Papier zu definieren, die im Wesentlichen mit dem Potenzial der Protokollsumme in Sleator Tarjans Papier identisch ist. Aber das gibt mir eine gute Intuition.
Jetzt wechsle ich zur Notation des Papiers. Wir ordnen jedem Knoten ein Gewicht zu . Sei die Summe des Gewichts des Unterbaums von . (Dies ist nur die Größe des Unterbaums von , wenn das Gewicht jedes Knotens eins ist.)w(u) u W(u) u u
Anstatt nun den Rang auf den Knoten zu definieren, definieren wir den Rang zu den Kanten, den sie Fortschrittsfaktor nannten .
Und das Potenzial von Baum istS
Beachten Sie, dass dies fast dem Potenzial von Sleator Tarjan entspricht und sich auf Pfaden addiert.
edit: Es stellt sich heraus, dass diese alternative Definition und die Intuition dahinter schon vor langer Zeit von Kurt Mehlhorn beschrieben wurden. Siehe sein Buch "Datenstrukturen und Algorithmen", Band I, Abschnitt III. 6.1.2 Spreizbäume, Seiten 263 - 274.
quelle