stable-sort

___ answer28599683 ___

Da niemand geantwortet hat und ich mir jetzt ganz sicher bin:

Ja, Sie könnten %code% verwenden, um eine der anderen Arten zu emulieren. Die Frage beschreibt im Detail wie.

Jedoch : Das ist aus verschiedenen Gründen eine schlechte Idee.

  • Die "Stabilität" hängt von der Implementierung von %code% ab (siehe Frage)
  • Die %code% selbst ist kein Teil eines Standards (soweit ich das beurteilen kann)
  • Die Wahrscheinlichkeit ist, dass Ihre Prolog-Implementierung ein %code% oder %code% bietet, das weitaus effizienter ist als %code% .

Es kann in seltenen Fällen vorkommen, dass die Größe der Elemente der Liste viel größer ist als die Länge der Liste, die wir sortieren, und dieser kleine Tanz:

%Vor%

( siehe hier ) ist tatsächlich teurer (langsamer) als die Verwendung von %code% , mit %code% vom Benutzer definiert. Auch dann hängt die Reihenfolge der Ergebnisse mit äquivalenten Schlüsseln nicht nur von der (Benutzer-) Definition von %code% ab, sondern auch von der Implementierung von %code% .

Mit anderen Worten, eine "stabile" Sortierung mit %code% ist eine schlechte Idee.

    
___ qstntxt ___

Dies ist ein Follow-up zu einem antworten auf eine Frage zum Sortieren nach einem bestimmten Argument eines Begriffs, ohne eine neue Liste für %code% zu erstellen (wenn ich die ursprüngliche Frage richtig verstanden habe).

Nehmen wir an, wir wollten %code% genauso verhalten wie %code% : Wenn ich das richtig verstehe, würde das bedeuten, es wie folgt zu benennen:

%Vor%

Nun sagen wir, dass wir %code% verwenden wollten, um nach %code% zu sortieren (siehe auch Frage ). Eine Möglichkeit wäre, ein Vergleichsprädikat %code% zu definieren, das %code% nicht mit %code% vereinigt, wenn die Elemente tatsächlich gleich sind:

%Vor%

Frage : Sortiert das wirklich einfach, ohne Duplikate zu entfernen, wie %code% es tut? Es scheint wie es sollte.

Weiter: Sagen wir, dass wir die Begriffe mit arity & gt; n, auf die Standard-Reihenfolge des n-ten Arguments in der Laufzeit. Der saubere Weg dazu wäre:

%Vor%

Wenn wir %code% verwenden wollten, um denselben Effekt zu erzielen, könnten wir versuchen, ein Vergleichsprädikat wie folgt zu verwenden:

%Vor%

Und nach dem zweiten Argument sortieren:

%Vor%

Dies ist jedoch nicht das gleiche wie %code% über dem, das %code% verwendet. Es wird Duplikate entfernen, und es werden zusammengesetzte Terme gemäß der Standardreihenfolge des ursprünglichen vollständigen Terms angeordnet, wenn die zweiten Argumente zweier Terme zufällig gleich sind:

%Vor%

Machen Sie die Annahme , dass für jedes Paar von %code% und %code% , das an das Vergleichsprädikat %code% übergeben wurde, %code% vor %code% in der ursprünglichen Liste steht. Können wir einen Vergleich definieren:

%Vor%

An dieser Stelle, genau dann, wenn zwei beliebige Elemente %code% und %code% immer an das Vergleichsprädikat in der gleichen Reihenfolge wie in der ursprünglichen Liste übergeben werden, sollte sich dies verhalten identisch mit %code% oben:

%Vor%

Nun ist es natürlich wichtig, dass %code% %code% mit %code% vereinigt, wenn die beiden "Schlüssel" gleich sind. Darüber hinaus ist das Verhalten implementierungsabhängig und nur identisch mit dem Beispiel %code% , wenn %code% die ursprüngliche Reihenfolge der Elemente beim Übergeben an das Vergleichsprädikat beibehält.

Frage Stimmt das?

Frage Gibt es einen Standard, der diesen Aspekt von %code% abdeckt?

    
___ tag123prolog ___ Prolog ist die am häufigsten verwendete Logik-Programmiersprache. Es unterstützt nicht-deterministische Programmierung durch chronologische Rückverfolgung und Mustererkennung durch Vereinheitlichung. ___ tag123compare ___ Die Analyse, die erforderlich ist, um die Unterschiede und Ähnlichkeiten zwischen zwei oder mehr Entitäten zu bewerten. ___ qstnhdr ___ Mögliche Verhaltensweisen von 'predsort / 3' ___ tag123stabesort ___ Der Sortieralgorithmus ist stabil, wenn die ursprüngliche Reihenfolge der gleichen Werte nach dem Sortieren erhalten bleibt. ___ tag123list ___ Liste kann sich beziehen auf: eine verkettete Liste (eine geordnete Menge von Knoten, die jeweils auf ihren Nachfolger verweisen) oder eine Form eines dynamischen Arrays. Um nicht für HTML-Listen verwendet zu werden, verwenden Sie stattdessen [html-lists]. ___ tag123sorting ___ Das Sortieren ist der Vorgang, bei dem eine Reihenfolge auf eine Objektgruppe angewendet wird. ___
1
Antwort

Mögliche Verhaltensweisen von 'predsort / 3'

Dies ist ein Follow-up zu einem antworten auf eine Frage zum Sortieren nach einem bestimmten Argument eines Begriffs, ohne eine neue Liste für keysort zu erstellen (wenn ich die ursprüngliche Frage richtig verstanden habe). Nehmen wir an...
21.01.2015, 21:00