OPL: Sortieren mal anders

Moderator: Algorithmische Modellierung

SmilingJ
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 292
Registriert: 5. Okt 2004 21:37
Kontaktdaten:

OPL: Sortieren mal anders

Beitrag von SmilingJ » 25. Aug 2008 14:52

Hallo, ich habe grad' nochmal versucht aus dem Kopf raus zu sortieren und mir ist dabei eine Frage aufgekommen:

Im Script wird die Bedingung, dass jedes assignment genau einmal vorkommt auf folgende weise erzwungen:

forall (i in indices) i <> j => assignment <> assignment[j];

ich habe mich gefragt, ob folgende bedingung äquivalent ist:

forall (i in numbers) sum(j in numbers) (assignment[j] = i) = 1;
Drei Menschen können ein Geheimnis bewahren, wenn zwei von ihnen tot sind. - Benjamin Franklin

Benutzeravatar
Ultr1
Mausschubser
Mausschubser
Beiträge: 99
Registriert: 13. Okt 2004 17:53
Wohnort: Dreieich
Kontaktdaten:

Re: OPL: Sortieren mal anders

Beitrag von Ultr1 » 25. Aug 2008 15:02

In der ersten Codezeile wird j nicht angegeben.

Im Grunde funktioniert dein Vorschlag, aber nur für bestimme Arrays. Es kann nur das Array sortieren, das in irgendeiner Reihenfolge die Zahlen 1 bis n beinhaltet.Das resultiert aus dem forall (i in numbers). Für eine Array wie z.B. [1,2,3,5,6,7] wird das nicht funktionieren, weil du nacheinander prüfst, ob die Zahlen eins bis sechs abgebildet worden sind.

Gruß
Es ist nicht entscheidend, was der Mensch tut, sondern was er ist. (Henry Miller)

SmilingJ
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 292
Registriert: 5. Okt 2004 21:37
Kontaktdaten:

Re: OPL: Sortieren mal anders

Beitrag von SmilingJ » 25. Aug 2008 15:11

oh.. so war das nicht gemeint.. ich sollte doch besser mal den code posten ... dann wird das klarer ...

Code: Alles auswählen

int+ length = ...;

range numbers = 1..length;

int+ input[numbers] = ...;

var int+ out[numbers] in 1..MAX_INT;
var int+ assignment[numbers] in numbers;

solve {
	forall(i in numbers) out[i] = in[assignment[i]];
	
	forall(i in numbers-1) out[i] <= out[i+1];
	
	forall(i in numbers) sum(j in numbers) (assignment[j] = i) = 1;
};

dass sollte doch aussagen, dass im assignment array alle nummern von 1 bis length genau einmal vorkommen, was ja einen ähnlichen zweck erfüllt wie die zeile aus den folien
Drei Menschen können ein Geheimnis bewahren, wenn zwei von ihnen tot sind. - Benjamin Franklin

Benutzeravatar
Ultr1
Mausschubser
Mausschubser
Beiträge: 99
Registriert: 13. Okt 2004 17:53
Wohnort: Dreieich
Kontaktdaten:

Re: OPL: Sortieren mal anders

Beitrag von Ultr1 » 25. Aug 2008 15:26

Ah dann habe ich das falsche verstanden, nehme alles zurück, stimmt alles :oops:
Es ist nicht entscheidend, was der Mensch tut, sondern was er ist. (Henry Miller)

Antworten

Zurück zu „Algorithmische Modellierung“