Hintergrund: Chao Xu hat vor einiger Zeit die folgende Frage gestellt: " Gibt es bekannte Vergleichs-Sortieralgorithmen, die sich nicht auf das Sortieren von Netzwerken reduzieren lassen, sodass jedes Element -mal verglichen wird ? ". Es scheint, dass wir ein bisschen mit dem Problem stecken; Ich habe das gleiche Problem mit Valentin Polishchuk im Jahr 2009 besprochen, und wir kamen nicht weiter.
Um ein paar neue Ideen zu bekommen, habe ich versucht, die einfachste Frage zu finden, die einen ähnlichen Geschmack hat und nicht ganz unbedeutend ist. Daher die folgende Frage.
Frage: Sie erhalten zwei sortierte Listen mit jeweils Elementen. Können Sie verschmelzen die Listen , so dass jedes Element nur verglichen O ( 1 ) mal?
Die Ausgabe sollte natürlich eine sortierte Liste sein, die alle Elemente enthält.
[Dies stellte sich als trivial heraus, die Antwort lautet "nein".]
Frage 2: Sie erhalten zwei sortierte Listen mit jeweils Elementen. Sie können fusionieren die Listen so daß jedes Element nur verglichen O ( 1 ) mal, wenn Sie erlaubt einen kleinen Bruchteil der Elemente zu verwerfen ?
Genauer gesagt sollte die Ausgabe eine sortierte Liste mit Elementen und ein "Papierkorb" mit T ( n ) Elementen sein. Wie klein können Sie den Wert T ( n ) machen ? Erst T ( n ) = n ist trivial. So etwas wie T ( n ) = n / 100 sollte auf einfache Weise machbar sein. Aber können Sie T ( n ) = o ( n ?
Anmerkungen:
Wir verwenden hier das Vergleichsmodell. Nur deterministische Algorithmen, wir sind an den Worst-Case-Garantien interessiert.
Beachten Sie, dass beide Listen genau Elemente enthalten. Wenn wir eine Liste mit n Elementen und eine andere mit 1 Element hätten, wäre die Antwort eindeutig "nein". Wenn beide Listen lang sind, scheint es jedoch möglich zu sein, einen Lastausgleich durchzuführen.
Diesmal ist jeder Algorithmus gültig. Wenn Ihr Algorithmus Sortiernetzwerke als Baustein verwendet, ist dies vollkommen in Ordnung.