Merge-Sort-Vergleiche: Worst Case und Durchschnitt
Dieser Rechner schätzt, wie viele Elementvergleiche ein gewöhnlicher Top-down-Merge-Sort für n Elemente ausführt.
Im Browser ausführen – kostenlos
Er liefert den exakten Worst Case, den Erwartungswert bei gleichverteilter zufälliger Reihenfolge, die Anzahl rekursiver Ebenen und n mal den Logarithmus von n zur Basis 2 als Referenz. So können Sie das linearithmische Wachstum konkret erkennen und von quadratischem Sortierverhalten unterscheiden.
Was der Rechner zählt
Berücksichtigt werden Ordnungsvergleiche zwischen Elementen während des Zusammenführens, also die zentrale Operation der üblichen Merge-Sort-Analyse. Indexprüfungen, Zuweisungen, Schreibvorgänge in temporäre Arrays, rekursive Aufrufe, Speicherbelegungen und interne Arbeit eines anwendungsspezifischen Vergleichers zählen nicht dazu. Ein einzelnes Element benötigt keinen Vergleich. Bei größeren Eingaben teilt der Algorithmus den Bereich, sortiert beide Teile und vergleicht wiederholt deren erste noch nicht verbrauchte Elemente. Das Zusammenführen von Gruppen mit a und b Elementen erfordert höchstens a plus b minus einen Vergleich, weil das letzte verbleibende Element ohne weiteren Vergleich kopiert werden kann. Der Worst Case wendet diese Regel auf den tatsächlichen Teilungsbaum an, auch wenn n keine Zweierpotenz ist. Verwenden Sie n_log2_n daher als Größenreferenz und die Vergleichsfelder als operative Schätzwerte.
Herleitung von Worst Case und Durchschnitt
Die exakte Worst-Case-Formel lautet: n mal die aufgerundete Zahl des Logarithmus von n zur Basis 2, minus zwei hoch dieser Zahl, plus eins. Sie beschreibt einen üblichen binären Merge Sort mit möglichst gleichmäßig geteilten Teilarrays. Der Durchschnitt ist ein Erwartungswert über gleichverteilt zufällige Permutationen verschiedener Schlüssel. Beim Zusammenführen von Folgen mit a und b Elementen beträgt er a plus b, minus a geteilt durch b plus eins, minus b geteilt durch a plus eins. Der Rechner summiert diese Kosten rekursiv über denselben ausgeglichenen Baum und rundet nur die angezeigte Endzahl auf sechs Dezimalstellen. Ein Erwartungswert darf gebrochen sein, obwohl jeder konkrete Lauf ganzzahlig viele Vergleiche ausführt. Doppelte Schlüssel, andere Gleichstandsregeln, natürliche Läufe oder Schwellen für Insertion Sort können den beobachteten Wert verändern.
Das linearithmische Ergebnis einordnen
n_log2_n zeigt die typische linearithmische Skala. Jede weitere Zusammenführungsebene verarbeitet alle n Elemente, während die Zahl der Ebenen nur logarithmisch wächst. Die beiden Verhältnisfelder teilen die Schätzwerte durch n mal den Logarithmus von n zur Basis 2. Damit sehen Sie für n größer als eins, wie nah die konkreten Werte an dieser Referenz liegen. Diese Angaben sind beschreibend, weder Komplexitätsbeweis noch Hardware-Benchmark. Speicherverkehr, Allokationen, Vergleicherkosten, Cache und Laufzeitumgebung können die reale Dauer bestimmen. Testen Sie Werte unmittelbar unter und über Zweierpotenzen. An diesen Grenzen ändert sich die Rekursionstiefe; zugleich wird sichtbar, warum die O-Notation Konstanten und Terme niedrigerer Ordnung ausblendet, obwohl diese für eine konkrete Eingabe weiterhin relevant sind.
Anwendungsfälle
Teure Vergleicher einplanen
Schätzen Sie Aufrufe eines aufwendigen Datensatzvergleichers vor einer großen stabilen Sortierung.
Algorithmisches Wachstum erklären
Vergleichen Sie exakte Werte mit n mal dem Logarithmus von n zur Basis 2.
Testerwartungen festlegen
Bestimmen Sie eine Worst-Case-Obergrenze für eine instrumentierte Implementierung.
Häufige Fragen
Was bedeutet hier ein Vergleich?
Gemeint ist ein Ordnungsvergleich beim Zusammenführen sortierter Folgen; Verwaltung und Datenbewegung zählen nicht.
Warum kann der Durchschnitt gebrochen sein?
Er ist der Erwartungswert über alle gleichverteilt zufälligen Permutationen, nicht das Ergebnis eines Laufs.
Berücksichtigt die Schätzung doppelte Werte?
Nein. Das Durchschnittsmodell setzt verschiedene Schlüssel voraus; Duplikate können den Wert ändern.
Ist dies ein Laufzeit-Benchmark?
Nein. Speicher, Prozessor, Laufzeitumgebung, Allokationen und Latenzen werden nicht modelliert.
Welche Merge-Sort-Variante wird modelliert?
Ein gewöhnlicher binärer Top-down-Merge-Sort mit möglichst gleich großen Teilbereichen.
Was kostet eine API-Anfrage?
Jede API-Anfrage kostet $0.002; im Browser kann dieselbe deterministische Logik laufen.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/dev/merge-sort-comparisons \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":8}'const res = await fetch("https://api.kit.forhosting.com/dev/merge-sort-comparisons", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/merge-sort-comparisons",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/merge-sort-comparisons", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/merge-sort-comparisons", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"n": 8
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.merge_sort_comparisons",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |