Kann die Sortierung einer Liste überprüft werden, ohne die Nachbarn zu vergleichen?


14

Eine n Item-Liste kann als sortiert verifiziert werden, indem jedes Item mit seinem Nachbarn verglichen wird. In meiner Anwendung kann ich nicht jedes Objekt mit dem Nachbarn vergleichen. Stattdessen finden manchmal Vergleiche zwischen entfernten Elementen statt. Da die Liste mehr als drei Elemente enthält und auch der Vergleich die einzige unterstützte Operation ist, gibt es jemals ein "Netzwerk" von Vergleichen, die beweisen, dass die Liste sortiert ist, aber mindestens ein direkter Nachbar zum Nachbarn fehlt Vergleich?

Formal habe ich für eine Folge von Elementen eich eine Menge von Indexpaaren (j,k) für die ich weiß, ob ej>ek , ej=ek oder ej<ek . Es existiert ein Paar (l,l+1) , das in der Menge der Vergleiche fehlt. Kann man also jemals nachweisen, dass die Reihenfolge sortiert ist?


1
Ein Hinweis, falls jemand diese Seite später findet, mit der Frage, ob Sie überprüfen können, ob eine Liste sortiert ist, ohne etwas zu vergleichen. Nur wenn Sie die Eingaben einschränken können und / oder etwas über die Form der Eingaben wissen. (zB radix sort).
HammerN'Songs

Es besteht jedoch die Möglichkeit, die Anzahl der verwendeten Vergleiche zu optimieren, wenn diese nicht sortiert sind.
Kumulierung

1
@Akkumulation Gibt es eigentlich eine solche Möglichkeit? Sollte trivial sein, ein solches Programm zu nehmen und eine gegnerische Liste mit der Länge n zu erstellen, die das Programm zwingt, n-1-Vergleiche durchzuführen. Siehe auch Ein Killer-Gegner für QuickSort , der diese Idee noch weiter treibt , um QuickSort in den schlechten Teil seiner asymptotischen Analyse zu zwingen.
Daniel Wagner

@DanielWagner Ja, eine solche Optimierung muss in Bezug auf den erwarteten Input der jeweiligen Anwendung erfolgen.
Kumulierung

Möglicherweise nicht möglich. Aber bitte klären Sie: Meinten Sie, Sie kennen nur die Vergleiche der Form (j, j + 1), nicht die allgemeinen (j, k)? Kennen Sie zum Beispiel jemals den Vergleich zweier Indexpositionen (j, j + 3)?
Ron

Antworten:


34

(ich,ich+1)

1,2,,ich-1,ich,ich+1,ich+2,,n1,2,,ich-1,ich+1,ich,ich+2,,n

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.