16.09.2017 Aufrufe

Vorkurs Informatik

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

13.2 Sortieren durch Mischen (1) 221<br />

Bezüglich der Speicheraufwandsanalyse ist zu beachten, dass sich der Speicherbedarf noch erhöhen<br />

kann, wenn in einer Java-Implementierung restfolge und ergebnisfolge jeweils durch ein<br />

Array realisiert wird. Die Länge eines Arrays muss bei seiner Deklaration auf den maximal zu<br />

erwartenden Umfang festgelegt werden, in unserem Fall also jeweils n für restfolge und ergebnisfolge.<br />

In einer derartigen Implementierung wird sich also ein Speicherbedarf von S(n)=(3n+c)<br />

Dateneinheiten ergeben, jeweils n für gegebenefolge, restfolge und ergebnisfolge. Diese Beobachtung<br />

zeigt, dass die Ausdrucksmöglichkeiten einer Programmiersprache Auswirkungen auf<br />

die Effizienz haben können.<br />

In Kapitel 5.1 gab es auch noch eine Lösung ohne Hilfsmengen, siehe Abschnitt 5.1.2. Die Datenstruktur<br />

gegebenefolge wird dort schrittweise so verändert, dass sie am Ende das Ergebnis<br />

enthält. Diese Lösung benötigt nur S(n)=(n + d) Elementardateneinheiten, wobei d eine von n<br />

unabhängige Konstante ist, die wiederum für Hilfsvariablen eingesetzt wird.<br />

Vergleichen wir den Speicherbedarf S(n)=(2n + c) der ersten Lösung mit dem Speicherbedarf<br />

S(n) =(n + d) der zweiten Lösung, dann erkennen wir, dass er in beiden Fällen asymptotisch<br />

von der Ordnung O(n) ist. Trotzdem unterscheidet er sich etwa um Faktor 2, was für praktische<br />

Anwendungen durchaus relevant sein kann. Hinzu kommt, dass die geschilderte Problematik bei<br />

einer Implementierung mit Arrays bei der zweiten Lösung nicht auftritt. Dies ist ein Beispiel<br />

dafür, dass es auch lohnend sein kann, den Aufwand genau und nicht nur asymptotisch zu analysieren.<br />

13.2 Sortieren durch Mischen (1)<br />

Wir wollen nun den Zeitaufwand des Verfahrens „Sortieren durch Mischen“ analysieren. Beginnen<br />

wir mit dem schon bekannten Algorithmus mischen.<br />

Abbildung 13.2 zeigt den Algorithmus mischen, ergänzt durch Angaben zur Zeitaufwandsanalyse.<br />

Seien n 1 beziehungsweise n 2 die Länge der folge1 beziehungsweise folge2. n = n 1 + n 2<br />

bezeichnet die Länge der Ergebnisfolge. Offensichtlich benötigen die ersten zwei Anweisungen<br />

des Algorithmus mischen nur konstant viele Operationen, sodass sie mit O(1) abgeschätzt<br />

werden können.<br />

Die solange-Schleife wird dann verlassen, wenn eine der beiden Folgen folge1 oder folge2 leer<br />

ist. Da in jedem Durchlauf des Rumpfs der Schleife entweder folge1 oder folge2 um ein Element<br />

verkürzt wird, geschieht dies spätestens dann, wenn beide Folgen leer sind, also nach spätestens<br />

n = n 1 + n 2 Schritten. Das bedeutet, dass die Bedingung der Schleife höchstens n-mal durchlaufen<br />

wird, was mit O(n) abgeschätzt werden kann.<br />

Die Schleife kann unter Umständen auch nach weniger Schritten verlassen werden, etwa dann,<br />

wenn aufgrund der Eingabewerte immer nur Elemente aus folge1, nie aber welche aus folge2<br />

entfernt werden. In diesem Fall würde die Schleife schon nach n 1 Durchläufen beendet. Da wir<br />

jedoch den Zeitbedarf im schlechtesten Fall abschätzen möchten, ist dieser günstigere Fall nicht<br />

relevant.<br />

Der Rumpf der Schleife besteht aus einer bedingten Anweisung. Die Ausführung der Bedingung<br />

benötigt nur konstant viele Operationen und wird daher mit O(1) abgeschätzt. Unabhängig von<br />

dem Ausgang der Bedingung wird ein Element an die Ergebnisfolge folge angefügt und aus einer

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!