Conceptos Básicos
Die Autoren präsentieren eine neuartige Charakterisierung stabiler Mergesort-Funktionen unter Verwendung relationaler Parametrizität und zeigen, dass diese die Korrektheit von Mergesort impliziert. Daher kann man die Korrektheit verschiedener Varianten von Mergesort (z.B. top-down, bottom-up, tail-rekursiv, nicht-tail-rekursiv, glatt und nicht-glatt) beweisen, indem man die Charakterisierungseigenschaft für jede Variation beweist.
Resumen
Die Autoren präsentieren eine Charakterisierung stabiler Mergesort-Funktionen, die leicht zu beweisen ist und mehrere Korrektheitsergebnisse von Mergesort impliziert.
Die Hauptidee ist, dass man jede stabile Mergesort-Funktion in die Identitätsfunktion umwandeln kann, indem man alle Vorkommen der Merge-Funktion durch Verkettung ersetzt. Um sicherzustellen, dass diese Ersetzung in der beabsichtigten Weise erfolgt, abstrahieren die Autoren zunächst die Mergesort-Funktion, um einen Typparameter darzustellen, der sortierte Listen und Operatoren darauf repräsentiert, wie Merge, Singleton und Leer.
Die Korrektheitsprüfung der Mergesort-Funktion erfolgt in zwei Schritten:
Beweis, dass eine Mergesort-Funktion die Charakterisierungseigenschaft erfüllt. Dies muss für jede Mergesort-Funktion einzeln durchgeführt werden.
Ableitung mehrerer Korrektheitsergebnisse allein aus der Charakterisierungseigenschaft. Dies kann generisch für jede Mergesort-Funktion durchgeführt werden.
Die Autoren zeigen, dass die Charakterisierung eine Induktionsregel über Spuren (binäre Bäume, die die zugrunde liegende Teile-und-Herrsche-Struktur von Mergesort widerspiegeln) impliziert, um die Beziehung zwischen Eingabe und Ausgabe von Mergesort zu begründen. Außerdem impliziert die Charakterisierung die Natürlichkeit von Sortierung. Diese beiden Folgerungen der Charakterisierung reichen aus, um verschiedene Korrektheitsergebnisse von Mergesort, einschließlich Stabilität, abzuleiten.
Darüber hinaus zeigen die Autoren, dass es mindestens zwei Arten von optimierten Mergesort-Funktionen gibt, die sich aufgrund von Leistungsgründen nicht gegenseitig ersetzen können: Zum einen die tail-rekursive Mergesort-Funktion, die effizient in call-by-value-Auswertung ist, zum anderen die nicht-tail-rekursive Mergesort-Funktion, die eine optimale inkrementelle Sortierung in call-by-need-Auswertung ermöglicht.
Estadísticas
Die Autoren zeigen, dass das Berechnen der ersten k Elemente einer Liste der Länge n in O(n + k log k) Zeit möglich ist, wenn man die nicht-tail-rekursive Mergesort-Funktion in call-by-need-Auswertung verwendet.
Citas
"Durch Ersetzen aller Vorkommen der Merge-Funktion durch Verkettung sollten wir jede stabile Mergesort-Funktion in die Identitätsfunktion umwandeln können."
"Wenn es permutiert, ist die Mergesort-Funktion instabil."