FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

meine Variante von "mergesort" (P1-Aufgabenblatt 4)

meine Variante von "mergesort" (P1-Aufgabenblatt 4) 2002-01-02 11:47
Anonymer User
Hi,
hab eben Aufgabenzettel 4 gemacht und eine neue Variante von mergesort entworfen. Was haltet ihr davon, müsste doch eigentlich
auch richtig sein oder?

mergesort([],[]).
mergesort([K1|R1],EL):- mergesort(R1,LL),
merge([K1],LL,EL).

Re: meine Variante von "mergesort" (P1-Aufgabenblatt 4) 2002-01-02 12:08
Zaphod
hm…bin mir nicht ganz sicher.
mergesort([],[]).%–>richtig!

mergesort([K1|R1],EL):- mergesort(R1,LL),
merge([K1],LL,EL).
Was tut merge? Lineares Einfügen von K1 in einer sortierten Liste LL, mit dem Ergebnis EL? (Ich hab den Zettel gerade nicht
vor mir) Warum muss K1 in Klammern stehen? Bitte einen Kommentar zu den Bezeichnern LL und EL oder etwas deutlichere Namen…
Ansonsten macht das einen ganz vernünftigen Eindruck

Re: meine Variante von "mergesort" (P1-Aufgabenblatt 4) 2002-01-02 12:50
Anonymer User
K1 muss in Klammern stehen, damit es eine Liste ist.
Ich baue als erstes die vorgegeben Liste mit hilfe von mergesort in eine LL=LereListe. Dann Sortiere ich jeden einzelnen
Kopf K1 als Liste getarnt mit merge in die LL Liste und erhalte eine lexikalisch sortierte Liste. Das Programm läuft wunderbar
und ich finds einfacher als die Variante auf der Musterlösung….
Ciao

Re: meine Variante von "mergesort" (P1-Aufgabenblatt 4) 2002-01-03 14:41
Popcorn
Ich weiß nicht. Ist irgendwie mehr eine Variante zu 2© als zu 3©. Ich denke das es bei der Aufgabe gerade der Trick war,
es mit dem Selbstgebauten merge und split zu machen. Schneller und besser ist Deine Lösung sicherlich, aber ob soetwas in
der Klausur gut ankommen würde?

Re: meine Variante von "mergesort" (P1-Aufgabenblatt 4) 2002-01-04 12:30
Anonymer User
hab mir dann jetzt auch mal die musterlösung angeschaut und frage mich was die markierte stelle im Prädikat soll, ich meine mymerge übernimmt doch schon das vergleichen, oder was verstehe ich da nicht

mergesort([],[]).
mergesort([X],[X]).
mergesort(L1,L2):-split(L1,Teil1,Teil2),L1\=Teil1,mergesort(Teil1,Sort1),mergesort(Teil2,Sort2),mymerge(Sort1,Sort2,L2).



Re: meine Variante von "mergesort" (P1-Aufgabenblatt 4) 2002-01-04 12:33
Anonymer User
ups ich wollte eigentlich nur

L1\=Teil1 markieren
sorry

Re: meine Variante von "mergesort" (P1-Aufgabenblatt 4) 2002-01-05 23:36
Slater
also das sortierverfahren, das da ganz oben steht, arbeitet genau wie das mysort aus 2.c, nur das statt 'insort' 'merge' verwendet wird, das bei einer 1er-liste so ziemlich das gleiche tut,
es wäre übersichtlicher, wenn man gleich alles direkt alles von 2.c. abgeschrieben hätte [img]http://images.rapidforum.com/images/i25.gif[/img],

damit ist das verfahren von typ insort und nicht mergesort, was ja 2 grundverschiede sortierverfahren sind mit unterschiedlichen rechenaufwand wie in 3.d. angedeutet,

als lösung für mergesort würde ich das als korrektor also in die ecke 0 punkte einorden [img]http://images.rapidforum.com/images/i25.gif[/img]



L1\=Teil1 steht da, damit ein aufruf mergesort([a],X), der in der zweiten zeile schon abschliessend bearbeitet wird, nicht zusätzlich noch in der 3. zeile zerlegt wird und damit ein zweites identisches ergebnis liefert, denk ich mal


Re: meine Variante von "mergesort" (P1-Aufgabenblatt 4) 2002-01-06 08:59
Wollemenzel
Ja,
geht aber auch so
mergesort([],[]).
mergesort([X],[X]).
mergesort([X1,X2|Rl],L2):-split([X1,X2|Rl],Teil1,Teil2),merg
esort(Teil1,Sort1),mergesort(Teil2,Sort2),mymerge(Sort1,Sort
2,L2).

Sorgt dafür, daß die dritte Alternative nur bei Listen mit mehr als einem Element unifiziert werden kann.