9. Übungsserie Sophia Schumann Montag, 18. Januar 2010
1. Aufgabe A = [9,3,7,5,11] A[1] = 3 < A[0] = 9 tausche die Felder A = [3,9,7,5,11] A[2] = 7 < A[1] = 9 tausche die Felder A = [3,7,9,5,11] A[3] = 5 < A[2] = 9 tausche die Felder A[2] = 5 < A[1] = 7 tausche die Felder Richtige Position A[4] zum Einfügen gefunden 2. Aufgabe (a) Richtige Position A[2] zum Einfügen gefunden Richtige Position A[3] zum Einfügen gefunden Richtige Position A[4] zum Einfügen gefunden 1
(b) A = [11,9,7,5,3] A[1] = 9 < A[0] = 11 tausche die Felder A = [9,11,7,5,3] A[2] = 7 < A[1] = 11 tausche die Felder A[1] = 7 < A[0] = 9 tausche die Felder A = [7,9,11,5,3] A[3] = 5 < A[2] = 11 tausche die Felder A[2] = 5 < A[1] = 9 tausche die Felder A[1] = 5 < A[0] = 7 tausche die Felder A = [5,7,9,11,3] A[4] = 3 < A[3] = 11 tausche die Felder A[3] = 3 < A[2] = 9 tausche die Felder A[2] = 3 < A[1] = 7 tausche die Felder A[1] = 3 < A[0] = 5 tausche die Felder Um die Komplexität des Algorithmus zu bewerten kann man den O-Kalkül verwenden. Er wird benutzt, um abzuschätzen, wieviel Zeit ein Algorithmus schlimmstenfalls braucht (Worst Case). Dabei werden die Schritte gezählt, die der Algorithmus ausführt. In unserem Fall führt der Algorithmus Vergleiche und Tauschoperationen aus. Wie oft er vergleichen und tauschen muss hängt davon ab, wie die Elemente in den unsortierten Feldern angeordnet sind. Bestenfalls (Best Case) sind die Elemente schon sortiert. Der Algorithmus beginnt am zweiten Element des Feldes. Dieses wird zunächst in einem anderen Feld abgelegt. Anschliessend wird das erste Element des Feldes mit dem Wert des separaten Feldes verglichen. Das kleinere von beiden wird an die erste Stelle in der Liste geschrieben. Danach schreibt der Algorithmus das nächste Element in das Feld ausserhalb und vergleicht es mit den vorherigen Elementen des Feldes. Je nachdem wie klein der Wert ist muss er weiter nach vorn geschoben werden. 2
Der Best Case ist also ein bereits sortiertes Feld. Hier muss der Algorithmus keine Tauschoperationen durchführen, da jedes Element schon an der richigen Stelle steht. Vergleichen muss er trotzdem. Bei einem Feld er Länge n müssen genau n 1 Vergleiche gemacht werden. Es sind nur n 1, da man beim zweiten und nicht beim ersten Element beginnt. (n 1) ist eine lineare Funktion, das heißt die Komplexität ist linear O(n). Die Komplexität hängt linear von dem Eingangsfeld ab. Um die Komplexität des Worst Case zu bestimmen, muss man die Anzahl der Vergleiche und Tauschoperationen zählen, wenn die Liste komplett unsortiert ist. Für das Beispiel der Länge n = 5 sieht das wie folgt aus: Vergleich des 2. mit dem 1. Element 1 Vergleich Tausch 2. und 1. Element 1 Tauschoperation nochmaliger Vergleich um festzustellen, dass wir am Anfang des Feldes sind 1 Vergleich 1 Hier ergeben sich insgesamt zwei Vergleiche und eine Tauschoperation. Als nächstes ergibt sich: Vergleich des 3. mit dem 2. Element 1 Vergleich Tausch 3. und 2. Element 1 Tauschoperation Vergleich des 2. mit dem 1. Element 1 Vergleich Tausch 2. und 1. Element 1 Tauschoperation nochmaliger Vergleich um festzustellen, dass wir am Anfang des Feldes sind 1 Vergleich Hier sind es drei Vergleiche und zwei Tauschoperationen. Führt man das Ganze so fort, dann sieht man, dass sowohl die Vergleiche als auch die Tauschoperationen mit jedem Schritt um eins zunehmen. Die Vergleiche beginnen bei eins und die Tuaschoperationen bei zwei. Daraus kann man zwei Summen aufstellen: i i=2 }{{} V ergleiche Durch Überlegungen erhält man: i=2 + n 1 i }{{} V ertauschungen i = ( i) 1. 1 Hier liegt eine gewisse Ungenauigkeit beim Zählen der Vergleiche vor. Beim Worst Case hat man die Besonderheit, dass jedes Element bis ganz an den Anfang des Feldes geschoben werden muss. Geht man von einem Element aus, welches nicht ganz nach vorne muss, so ist der letzte Vergleich logischer bzw. einfacher nachzuvollziehen. Denn er wird gemacht um festzustellen, dass man die richtige Stelle zum Einfügen gefunden hat. Beim Worst Case erscheint der letzte Vergleich etwas sinnlos. An der Komplexität ändert es nichts, wenn man ihn nicht mitzählen würde, sie ist so oder so O(n 2 ) 3
und: n 1 i = ( i) n. Setzt man diese beiden Summen in die obige Gleichung ein, dann ergibt sich: ( i) 1 + ( i) n = = 2( i) 1 n n(n + 1) = 2 1 n 2 = n 2 + n n 1 = n 2 1 Die größte Potenz, die in dieser Funktion noch vorkommt ist das Quadrat. Die Komplexität für den Worst Case ist quadratisch O(n 2 ). 4