Ich bin teilweise einverstanden mit @Armen, sie sollten vergleichbar sein.
Aber: Betrachten Sie den Fall, wenn sie in der Mitte geteilt sind. Um zwei Listen von Längen n
zusammenzuführen, würden wir 2*n - 1
Vergleiche benötigen (manchmal weniger, aber wir betrachten es aus Gründen der Einfachheit als fest), wobei jeder von ihnen den nächsten Wert erzeugt. Es würde log2(n)
Ebenen von Zusammenführungen geben, die uns ungefähr n*log2(n)
Vergleiche gibt.
Betrachten wir nun den Zufallssplit-Fall: Die maximale Anzahl an Vergleichen, die zum Zusammenführen einer Liste der Länge n1
mit einer Länge n2
benötigt wird, lautet n1 + n2 - 1
. Heiterer, die durchschnittliche Zahl wird nahe daran sein, denn selbst für die unglücklichste Aufteilung 1
und n-1
werden wir einen Durchschnitt von n/2
Vergleiche benötigen. Wir können also davon ausgehen, dass die Kosten für das Zusammenführen pro Level die gleichen sind wie im Fall.
Der Unterschied ist, dass in zufälligen Fall die Anzahl der Ebenen größer sein wird, und wir können davon ausgehen, dass n
für die nächste Ebene wäre max(n1, n2)
anstelle von n/2
. Diese max(n1, n2)
wird dazu neigen, 3*n/4
, das gibt uns die ungefähre Formel
n*log43(n) // where log43 is log in base 4/3
zu sein, die uns
n * log2(n)/log2(4/3) ~= 2.4 * n * log2(n)
Dieses Ergebnis noch größer ist gibt als die richtige, weil wir, dass die kleine Liste ignoriert haben weniger Ebenen, aber es sollte nahe genug sein. Ich nehme an, dass die richtige Antwort die Anzahl der comparations im Durchschnitt kann verdoppelt