Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
q1:java-sortierverfahrenquicksort [2017/07/11 08:54] – admin03 | q1:java-sortierverfahrenquicksort [2017/07/11 09:07] (aktuell) – [Quicksort] admin03 | ||
---|---|---|---|
Zeile 31: | Zeile 31: | ||
^02|::: | ^02|::: | ||
+ | ** | ||
+ | Laufzeitverhalten von Quicksort: | ||
+ | |||
+ | Im Idealfall wird jedes Teilfeld wieder in der Mitte geteilt (dem kommt man besonders nahe, wenn das Vergleichselement nicht sehr groß bzw. sehr klein, eben " | ||
+ | Betrachten wir jeweils alle Teilfelder auf einer Zerlegungsstufe gemeinsam, so haben wir $n$ Vergleiche (denn jedes Element wird ja einem Vergleich unterzogen) und im Durchschnitt $\frac{1}{4}\cdot n$.Tauschoperationen (im ungünstigsten Fall $\frac{1}{2}\cdot n$ , im günstigsten Fall keine Vertauschungen). | ||
+ | Zusammen ergibt dies $\frac{5}{4}\cdot n$ Operationen pro Zerlegungsstufe. | ||
+ | Bei idealer Zerlegung muss für die Anzahl $k$ der Zerlegungsstufen gelten: $2^k=n$ | ||
+ | |||
+ | Also ist das Laufzeitverhalten im Idealfall: | ||
+ | |||
+ | $$k\cdot \frac{5}{4} \cdot n = \log_2(n) \cdot \frac{5}{4} \cdot n = \frac{5}{4}\cdot n \cdot \log_2(n) \sim n \cdot \log(n)$$ | ||
+ | (da die Logarithmen zu verschiedenen Basen sich nur durch einen konstanten Faktor unterscheiden, | ||
+ | |||
+ | Der **ungünstigste Fall** entsteht, wenn jeweils nur ein 1-Teilfeld abgespaltet wird. Man erhält dann $k=n$ Zerlegungsstufen und damit $$n\cdot \frac{5}{4} \cdot n = \frac{5}{4} \cdot n^2 \sim n^2$$ Operationen, | ||
+ | |||
+ | |||
+ | ====== Aufgaben ====== | ||
+ | |||
+ | |||
+ | ===== Aufgabe 1 ===== | ||
+ | Sortiere den Notenspiegel mit Quicksort. | ||
+ | < | ||
+ | < | ||
+ | <tr> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </tr> | ||
+ | <tr> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </tr> | ||
+ | </ | ||
+ | </ | ||
+ | ===== Aufgabe 2===== | ||
+ | 2 Sortiere das Feld | ||
+ | |||
+ | ^Igel^Baer^Lama^Tiger^Gnu^Affe^Schwein^Zebra^Esel^Maus^ | ||
+ | |||
+ | mit Quicksort | ||
+ | ===== Aufgabe 3 ===== | ||
+ | Sortiere das Zahlenfeld | ||
+ | ^456 ^734 ^829 ^145^ 788 ^541^ 901 ^669^ 291^595^ 803^ 101 ^689 ^472^ | ||
+ | mit Quicksort | ||
+ | |||
+ | ===== Aufgabe 4 ===== | ||
+ | |||
+ | Überlege, ob das Vergleichselement eines der Feldelemente sein muss. | ||
+ | |||
+ | ===== Aufgabe 5 ===== | ||
+ | |||
+ | Es gibt eine Verbesserung von Quicksort, bei der man als Kandidaten für das Vergleichselement das ganz links, das ganz rechts und das in der Mitte in Erwägung zieht. Welches sollte man nehmen? Wann bringt diese Abänderung Vorteile? |