FB18 - Das Forum für Informatik

fb18.de / Bachelorstudieng / PM Praktische Informatik

Sortieralgorithmen

Sortieralgorithmen 2011-03-16 00:18
Anonymer User
Hallo zusammen,
bei der Lektüre vom Cormen und Wikipedia ist mir etwas aufgefallen, und ich bin mir nicht sicher ob meine Vermutung stimmt:

Es gibt keinen (vergleichenden) Sortieralgorithmus der stabil, in-place und in 0(n*logn) ist.


Wäre über Hinweise dankbar :)
(Ja ich habe Cormen durchgeschaut, Wiki, etc. aber vielleicht bin ich dämlich)

RE: Sortieralgorithmen 2011-03-16 00:41
Vollkorn
Hehe. Solange ich keinen mathematischen Beweis gesehen habe bleibe ich bei der Aussage "Vielleicht gibt es einen, der ist aber der Menschheit nicht bekannt" [25] Mir geht es ähnlich: Ich kenne keinen, der alles drei ist.

RE: Sortieralgorithmen 2011-03-16 01:44
Raid
Tim Sort und Merge Sort würden mir jetzt so spontan einfallen
Merge sort is an O(n log n) comparison-based sorting algorithm. Most implementations produce a stable sort, meaning that the implementation preserves the input order of equal elements in the sorted output. It is a divide and conquer algorithm. Merge sort was invented by John von Neumann in 1945.[1]
http://en.wikipedia.org/wiki/Merge_sort

RE: Sortieralgorithmen 2011-03-16 07:36
UncleOwen
Die sind aber beide nicht in-place, oder?

RE: Sortieralgorithmen 2011-03-16 08:51
Anonymer User
Die sind beide out-of place :)

RE: Sortieralgorithmen 2011-03-16 08:57
Anonymer User
Das ist schon interessant - Das man bis jetzt noch keinen Sortieralg. kennt der das "beste" aus allen Welten vereinigt. Finde aber auch keinen Beweis das so es so einen nicht geben kann.

Außer das hat hängt vielleicht irgendwie mit den Beweis zusammen, dass vergleichende Sortierverfahren bestenfalls in n+logn liegen.
Begründet wird das im Cormen mit einem Entscheidungsbaum der Höhe h, dessen Blätter diese Vergleichsentscheidungen sind. Möglicherweise ist die Menge dieser Entscheidungen in-place einfach nicht realisierbar, außer man verwendet sehr spezielle Strukturen wie Heaps.

RE: Sortieralgorithmen 2011-03-16 10:06
Wulf
Man kann doch jeden Sortieralgorithmus mit [latex]\Theta(n log n)[/latex] Platz stabilisieren, indem man alle Elemente unterscheidbar macht:
a,b,c,a,d,b,b,f wird einfach zu (a,0),(b,1),(c,2),(a,3),(d,4),(b,5),(b,6),(f,7) umgeschrieben. (a0,b0) > (a1,b1) gdw. a0>a1 oder a0=a1 und b0>b1.
Aber ich vermute mal, dass so ein Trick nicht gilt und in der Praxis auch kaum relevant sein dürfte :-)

RE: Sortieralgorithmen 2011-03-16 12:00
Anonymer User
Ich glaube wenn ich diesen "Trick" mit der Unterscheidung richtig verstehe, ist er speichertechnisch betrachtet abhänig von n und würde durch den zusätzlichen Schlüssel dann abhänig von n "mehr speicher" benötigen als für die ursprüngliche Eingabe.


Allen aber an der Stelle vielen Dank! Ich merke hier im Forum immer wieder wie spannend Informatik doch ist.

RE: Sortieralgorithmen 2011-03-16 13:45
Wulf
Wie gesagt, man benötigt [latex]\Theta(n\log{n})[/latex] mehr Platz.

RE: Sortieralgorithmen 2011-03-16 14:27
Anonymer User
zu Merge Sort

Das Verfahren arbeitet bei Arrays in der Regel nicht in-place, es sind dafür aber (trickreiche) Implementierungen bekannt. Verkettete Listen sind besonders geeignet zur Implementierung von Mergesort, dabei ergibt sich die in-place-Sortierung fast von selbst.

aus http://de.wikipedia.org/wiki/Mergesort

RE: Sortieralgorithmen 2011-03-17 21:04
Raid
Timsort: Worst case space complexity O(n)

http://en.wikipedia.org/wiki/Timsort

Das ist für mich in-Place.

RE: Sortieralgorithmen 2011-03-18 01:37
Anonymer User
O(n) heißt linearer Speicher, nicht in-place.

Timsort braucht nach http://en.wikipedia.org/wiki/Sorting_algorithm O(n) zusätzlichen Speicher.

RE: Sortieralgorithmen 2011-03-19 01:30
Raid
O(n) heißt linearer Speicher, nicht in-place.

Timsort braucht nach http://en.wikipedia.org/wiki/Sorting_algorithm O(n) zusätzlichen Speicher.

arg mist, da war ja was -.-


http://www.springerlink.com/content/bx6d9xv8p6w3d3p4/

deutet darauf hin das es sowas gibt:

[attachment=514]
Anhänge sort.PNG