Ich versuche, eine Sortierung für einen isometrischen Renderer zu optimieren. Was sich als schwierig erweist, ist, dass der Komparator "A> B", "A < B" oder "die Beziehung zwischen A und B ist mehrdeutig" zurückgeben kann. Alle Standard-Sortieralgorithmen erwarten, dass Sie die Werte von zwei beliebigen Objekten vergleichen können, aber das kann ich hier nicht tun. Gibt es bekannte Algorithmen für diese Situation?Eine Liste sortieren, wenn der Vergleich zwischen zwei beliebigen Elementen nicht eindeutig ist?
Zum Beispiel kann es eine Situation geben, in der die Beziehung zwischen A und C mehrdeutig ist, aber wir kennen A> B und B> C. Die endgültige Liste sollte A, B, C sein.
Beachten Sie auch, dass es mehrere Lösungen geben kann. Wenn A> B, aber C sowohl für A als auch für B zweideutig ist, dann kann die Antwort C, A, B oder A, B, C sein.
Edit: Ich habe gesagt, es war für die Sortierung in einem isometrischen Renderer, aber mehrere Leute fragten nach mehr Informationen, also hier geht. Ich habe ein isometrisches Spiel und versuche die Objekte zu sortieren. Jedes Objekt hat einen rechteckigen, achsversetzten Fußabdruck in der Welt, was bedeutet, dass sie aus der Perspektive der Kamera als eine Art Rautenform erscheinen. Die Höhe der Objekte ist nicht bekannt, daher wird angenommen, dass ein Objekt vor einem anderen Objekt in der Lage ist, das Objekt in der Rückseite zu verschließen, und daher muss es in der Rückseite nach (später in der Liste sortiert) gezeichnet werden.
Ich habe auch eine wichtige Überlegung weggelassen, die darin besteht, dass eine kleine Anzahl von Objekten (die Avatare) sich bewegen.
Edit # 2: Ich habe endlich genug rep, um Bilder zu posten! A und B ... nun, sie sind nicht streng zweideutig, weil sie in jedem Fall eine bestimmte Beziehung zueinander haben. Diese Beziehung kann jedoch nicht durch Betrachten der Variablen von A und B selbst erkannt werden. Nur wenn wir auch auf C schauen, können wir wissen, in welcher Reihenfolge sie gehen.
Ich denke definitiv topographische Art ist der Weg zu gehen, also überlege ich die Frage beantwortet, aber ich bin glücklich, Erklärungen zu machen die Frage für die Nachwelt.
Wie Eric antwortete (und hat seitdem gelöscht) können Sie nicht einfach eine Standardsortierung verwenden, sondern davon ausgehen, mehrdeutig ist gleich oder kein Swap? Wenn Sie eine Sortierung verwenden, die potenziell mehrere Vergleiche pro Element gegen alle anderen durchführen kann, z. Bubble-Sortierung sollte dann die Reihenfolge definitiv auflösen; aber selbst wenn du es nicht tust, z.B. Der Quicksort, den Eric vorgeschlagen hat, sollte immer noch zu etwas führen, das zu einer Ihrer vielfältigen Lösungen passt. – Rup
Sie könnten zuerst eine normale Blasensortierung durchführen. Aber wenn die Beziehung zwischen zwei Elementen mehrdeutig ist, tauschen Sie sie nicht aus. Als nächstes gehen Sie durch die sortierte Liste und wann immer Sie ein Element finden, dessen Beziehung zu seinen Nachbarn mehrdeutig ist, überprüfen Sie, ob es kleiner oder größer als eines der anderen Elemente in der Liste ist. – SpiderPig
Können Sie weitere Informationen zu den zu vergleichenden Objekten hinzufügen? Was sind Sie? Wie entsteht die Mehrdeutigkeit? ... Vielleicht kann ein cleverer Benutzer eine nicht triviale Beziehung zwischen den Elementen sehen, wenn Sie weitere Informationen über die Art der zu vergleichenden Objekte hinzufügen – higuaro