$ \ Phi_1= 1 $ oder $ \ phi_1= 2 $ für den dynamischen $ \ text {table-Insert} $, wobei $ \ phi_i $ die potenzielle Funktion nach $ i $ tiger ist, gemäß CLRs
Frage
Folgendes stammt aus Abschnitt Dynamic Tables , Einführung in Algorithmen von cormmen. et. al.
In der folgenden Pseudocode gehen wir davon aus, dass $ T $ ein Objekt ist, das den Tisch darstellt. Das Feld $ Tabelle [T] $ enthält einen Zeiger auf den Speicherblock, der den Tisch darstellt. Das Feld $ num [t] $ enthält die Anzahl der Elemente in der Tabelle und das Feld Größe [t] $ ist die Gesamtzahl der Slots in der Tabelle. Zunächst ist die Tabelle leer: $ num [t]= Größe [t]= 0 $ .
$ \ Text {Tischeinsatz (t, x)} $
$ 1 \ Quad \ Text {falls $ Größe [t]= 0 $} $
$ 2 \ QUAD \ QUAD \ Text {Zerweisen Sie dann $ Table [T] $ mit $ 1 $ Slot} $
$ 3 \ Quad \ Quad Size [T] \ Lisplaw 1 $
$ 4 \ QUAD \ Text {if} num [t]= Größe [t] $
$ 5 \ QUAD \ Quad \ Text {Allocate $ NEW {\ \ text {- {{}} Tabelle $ mit $ 2 \ cdot Größe [t] $ Slots} $
$ 6 \ 6 \ Quad \ Quad \ Quad \ Text {Setzen Sie alle Elemente in $ Table [T] $ in $ neue {\ text {-}} Tabelle $} $
$ 7 \ QUAD \ Quad \ Quad \ Text {kostenlose $ Tabelle [T] $} $
$ 8 \ QUAD \ Quad \ Quad Tabelle [T] \ Lisplaw New {\ Text {-}} Tabelle $
$ 9 \ QUAD \ QUAD \ Quad Size [T] \ Lisplaw 2 \ CDOT Größe [T] $
$ 10 \ QUAD \ Text {Einfügen von $ x $ in $ Table [T] $} $
$ 11 \ QUAD NUM [T] \ Lisplaw Num [T] + 1 $
für die amortisierte Analyse für die Folge von $ N $ $ \ Text {Table-Insert} $ Die mögliche Funktion, die sie wählen, ist wie folgt,
$$ \ phi (t)= 2.Num [t] -ssize [t] $$
Analyse der fortgeführten Anschaffungskosten des
Anfangs haben wir $ num_0= 0, size_0= 0 $ , und $ \ phi_0= 0 $ .
Wenn der
$$ \ wideHat {c_i}= c_i + \ phi_i- \ phi_ {i-1}= 3 \ text {(Angaben nicht angezeigt)} $$ < / p>
Wenn der
$$ \ wideHat {c_i}= c_i + \ phi_i- \ phi_ {i-1}= 3 \ text {(Angaben nicht angezeigt)} $$ < / p>
Jetzt ist das Problem, dass sie keine Berechnungen für $ \ wideHat {C_1} $ , die Situation für das erste Einfügen eines Element in der Tabelle (Linie 1,2,3,10,11 des Codes wird nur ausgeführt).
in dieser Situation, die Kosten $ c_1= 1 $ , $ \ phi_0= 0 $ und
Wir sehen, dass $ \ phi_1= 1 \ Tag 1 $
so, $$ \ WIDHAT {C_1}= c_1 + \ phi_1- \ phi_0= 2 $$
Der Text sagt jedoch, dass die fortgeführten Anschaffungskosten
Außerdem in der darunter liegenden Darstellung
Der Text stellt graphisch dar, der
Ich komme nicht ganz dort, wo ich falsch mache.
Lösung
Sie haben in diesem beliebten Lehrbuch, dessen Namen, dessen Namen wir nicht noch einmal erwähnen dürfen, eine Instanz des berüchtigten Off-of-One-Fehlers erwischt haben.
Um wiederholt zu werden, ist es korrekt, dass "die Kosten $ C_1= 1 $ , $ \ phi_0= 0 $ < / span> "," $ num_1= size_1= 1 $ $ \ impliziert $ $ \ phi_1= 2 \ cdot1-1= 1 $ " und " $ \ Hat {c_1}= $ $ C_1 + \ phi_1- \ phi_0 $ $= 2 $ ". Es ist falsch, diesen $ \ wideHat c_i= 3 $ für alle $ i $ . .
Der erste
Dieser Fehler ist verwirrend, da wir dazu neigen, ein beispielhaftes Lehrbuch zu vertrauen, in dem so viel Aufmerksamkeit auf Details und Richtigkeit gezahlt wurden.
Andererseits ist dieser Fehler nicht sehr wichtig, da er, wie Sie dies bemerkt haben, immer noch, dass "die amortisierten Kosten höchstens 3" sind.
Übrigens, wenn Sie den Figur am Ende der Frage näher betrachten, zeigt es das Potenzial am Ende des ersten