4. algorithmen - swl.htwsaar.de · 3 motivation § zwar könnten wir alle algorithmen als...
TRANSCRIPT
2
Motivation§ Algorithmen als systematische Vorgehensweisen zur
Lösung eines formal definierten Problems
§ Der Begriff „Algorithmus“ geht auf den Gelehrten
Muhammad al-Chwarizmi zurück,
der um das Jahr 800 wirkte
§ Wir haben bereits einige Algorithmenkennengelernt z.B.:
§ Umwandlung in b-adische Darstellung
§ Berechnen von Zweierpotenzen
Informatik 1 / Kapitel 4: Algorithmen
Quelle: en.wikipedia.org
3
Motivation§ Zwar könnten wir alle Algorithmen als RAM-Programme
beschreiben, diese würde jedoch sehr umfangreichwie das folgende Beispiel illustriert
§ Beispiel: Bestimmen des Maximums von drei Zahlen x, yund z in s[0], s[1] und s[2]. Das Ergebnis soll in der Speicherstelle s[3] abgelegt werden.
Informatik 1 / Kapitel 4: Algorithmen
4
Motivation
Informatik 1 / Kapitel 4: Algorithmen
INPUT 0..2OUTPUT 3 0: a <- s[0]1: a <- a - s[1] 2: if a > 0 then jump 10 // s[0] > s[1]? 3: a <- s[1] 4: a <- a - s[2] 5: if a > 0 then jump 8 // s[1] > s[2]? 6: a <- s[2] 7: jump 15 8: a <- s[1] 9: jump 1510: a <- s[0]
5
Motivation
§ Selbst einfache Probleme können zu langen undschwer verständlichen RAM-Programmen führen
§ Wir beschreiben Algorithmen daher im Folgendenmittels einer höheren Programmiersprache
Informatik 1 / Kapitel 4: Algorithmen
11: a <- a - s[2]12: if a > 0 then jump 14 // s[0] > s[2]?13: jump 614: a <- s[0]15: s[3] <- a16: HALT
7
4.1 Code§ Algorithmen lassen sich mittels sogenannten Pseudocode
beschreiben, der an höhere Programmiersprachen(z.B. C/C++, Java) angelehnt ist
§ Es gibt verschiedene Varianten von Pseudocode, die jedoch in den verwendeten Konzepten übereinstimmen
§ Wir verwenden einen Pseudocode, der an Java angelehntist, aber nur eine Teilmenge der Sprachbestandteileverwendet und z.B. auf Objektorientierung verzichtet
Informatik 1 / Kapitel 4: Algorithmen
8
4.1.1 Elementare Datentypen§ RAM-Programme waren auf ganze Zahlen beschränkt
§ Unser Pseudocode kennt die elementaren Datentypen
§ boolean für Boolesche Werte (d.h. true und false)
§ int für ganze Zahlen (z.B. 41)
§ float für Kommazahlen (z.B. 3.14)
§ char für Zeichen (z.B. ‘a‘ und ‘z‘)
§ Diese vier elementaren Datentypen genügen uns,da wir bei der Beschreibung von Algorithmenauf Details (z.B. 32 Bit oder 64 Bit) verzichten
Informatik 1 / Kapitel 4: Algorithmen
9
4.1.2 Variablen§ Bei RAM-Programmen mussten wir uns merken, wo
welche Information im Speicher abgelegt ist
§ Unser Pseudocode kennt benannte typisierte Variablen,deren Namen sich aus Klein- und Großbuchstabensowie dem Unterstrich (_) zusammensetzen
§ Variablen werden durch Angabe ihres Datentyps undihres Namens im Code deklariert z.B.
Informatik 1 / Kapitel 4: Algorithmen
1 int n;
10
Wertzuweisung§ Bei der Deklaration kann einer Variable ein Wert
mittels = zugewiesen werden
§ Ebenso kann der Wert einer bereits deklarierten Variablenmittels = geändert werden
Informatik 1 / Kapitel 4: Algorithmen
1 b = true;2 n = 21;3 r = 2.78;4 c = ’z’;
R #QQH2�M # 4 7�Hb2ck BMi M 4 9kcj 7HQ�i ` 4 jXR9c9 +?�` + 4 ^�^c
<latexit sha1_base64="8oEj4GwvXe055swAcKhVuXKiup8=">AAACV3icdZBLa1NBFMdPrlrj9ZWqOzcXs6ir+0gLpoRCwI0boULTFppLODM9ScfMi5lJabjki/lNunOr+B10THQRi4dZ/B8zB+bHrBQ+lOVtK7l3/8HOw/aj9PGTp8+ed3ZfnHqzcJxG3Ejjzhl6kkLTKIgg6dw6QsUknbH5+9/92TU5L4w+CUtLtcKZFlPBMcRo0jkZM5oJ3XzGa1ylzBhJqDOWHWVTlJ4GqdAh09Ee9AbpVBoMmYtuP68OBim/QpfxaPdwb5COSV9u9kw63TLvHfbL/cPsrqjycj3d4StYz/Gk82N8afhCkQ5covcXVWlD3aALgktapeOFJ4t8jjO6wNKiJVc3MzKKgltu11FqVOTrZg1nq2xQeb9U7E6oMFxth5HEPCDz/ywP037dCG0XgTSP3Vo2xchHxMWckYtHFB+XxcTGIP7JFxID3RQKuTM+j3KVRjx/GWT/F6e9vIr6U6877G84QRtewxt4CxW8gyF8gGMYAYcv8BW+wffWbetnspO0N1eT1p83L2Frkt1fgaG0Xg==</latexit><latexit sha1_base64="8oEj4GwvXe055swAcKhVuXKiup8=">AAACV3icdZBLa1NBFMdPrlrj9ZWqOzcXs6ir+0gLpoRCwI0boULTFppLODM9ScfMi5lJabjki/lNunOr+B10THQRi4dZ/B8zB+bHrBQ+lOVtK7l3/8HOw/aj9PGTp8+ed3ZfnHqzcJxG3Ejjzhl6kkLTKIgg6dw6QsUknbH5+9/92TU5L4w+CUtLtcKZFlPBMcRo0jkZM5oJ3XzGa1ylzBhJqDOWHWVTlJ4GqdAh09Ee9AbpVBoMmYtuP68OBim/QpfxaPdwb5COSV9u9kw63TLvHfbL/cPsrqjycj3d4StYz/Gk82N8afhCkQ5covcXVWlD3aALgktapeOFJ4t8jjO6wNKiJVc3MzKKgltu11FqVOTrZg1nq2xQeb9U7E6oMFxth5HEPCDz/ywP037dCG0XgTSP3Vo2xchHxMWckYtHFB+XxcTGIP7JFxID3RQKuTM+j3KVRjx/GWT/F6e9vIr6U6877G84QRtewxt4CxW8gyF8gGMYAYcv8BW+wffWbetnspO0N1eT1p83L2Frkt1fgaG0Xg==</latexit><latexit sha1_base64="8oEj4GwvXe055swAcKhVuXKiup8=">AAACV3icdZBLa1NBFMdPrlrj9ZWqOzcXs6ir+0gLpoRCwI0boULTFppLODM9ScfMi5lJabjki/lNunOr+B10THQRi4dZ/B8zB+bHrBQ+lOVtK7l3/8HOw/aj9PGTp8+ed3ZfnHqzcJxG3Ejjzhl6kkLTKIgg6dw6QsUknbH5+9/92TU5L4w+CUtLtcKZFlPBMcRo0jkZM5oJ3XzGa1ylzBhJqDOWHWVTlJ4GqdAh09Ee9AbpVBoMmYtuP68OBim/QpfxaPdwb5COSV9u9kw63TLvHfbL/cPsrqjycj3d4StYz/Gk82N8afhCkQ5covcXVWlD3aALgktapeOFJ4t8jjO6wNKiJVc3MzKKgltu11FqVOTrZg1nq2xQeb9U7E6oMFxth5HEPCDz/ywP037dCG0XgTSP3Vo2xchHxMWckYtHFB+XxcTGIP7JFxID3RQKuTM+j3KVRjx/GWT/F6e9vIr6U6877G84QRtewxt4CxW8gyF8gGMYAYcv8BW+wffWbetnspO0N1eT1p83L2Frkt1fgaG0Xg==</latexit><latexit sha1_base64="zBxRdJqGOIH4fdWweV2uMk60KV8=">AAACV3icdZBLS1tBFMcn10fjtdZol24uZmFX95EIRkJBcNNNwYJRwVzCmfEkTjMvZibScMkX6zdx51bpd2inMS6ieJjF/zFzYH7UCO58nt/XopXVtfUP9Y148+PWp+3Gzu6F0xPLsMe00PaKgkPBFfY89wKvjEWQVOAlHZ/+7y/v0Dqu1bmfGiwljBQfcgY+RIPGeZ/iiKvqJ9zBLKZaCwSV0ORrMgThsBtz5RMV7GGrGw+FBp/Y4NppcdiN2S3YhAV7AAfduI/q5nnPoNHM09ZxJ28fJ29FkebzaZLFnA0af/o3mk0kKs8EOHdd5MaXFVjPmcBZ3J84NMDGMMJryA0YtGU1Qi3R2+lyHaQCia6s5nCWygqkc1NJ34QS/O1yGEiMPVD3arkfdsqKKzPxqFjo5rLKei4gzsYUbTg8+z7NBiYE4U8uE+DxVyaBWe3SIGdxwPPCIHlfXLTSIugfreZJZwGqTvbIPvlCCnJETsg3ckZ6hJHf5IE8kqfafe1vtB7Vn69GtcWbz2Rpop1/Bv20Cg==</latexit>
11
4.1.3 Arrays§ Arrays (Felder) speichern mehrere Werte des gleichen
elementaren Datentyps (in einem zusammenhängendenBereich des Speichers)
§ Bei der Deklaration wird die Länge des Arrays angegeben
§ Die Länge eines Arrays können wir wie folgt ermitteln
und z.B. in einer anderen Variable n ablegen
Informatik 1 / Kapitel 4: Algorithmen
1 int [] a = new int [10];
1 int n = a. length ;
12
Arrays§ Den Werten eines Arrays der Länge n sind die Indizes0 bis (n-1) zugewiesen und wir können auf eineneinzelnen Wert wie folgt zugreifen
Informatik 1 / Kapitel 4: Algorithmen
1 int first = a[0];2 int second = a[1];3 int last = a[a. length - 1];
13
4.1.4 Operationen
§ Auf Variablen unserer elementaren Datentypen stehenuns die folgenden Operationen zur Verfügung
§ Addition (+), Subtraktion (-), Multiplikation (*) und Division (/) auf int und real
§ Ganzzahliger Rest (%), Inkrement (++) und Dekrement (--) auf int
§ Logisches Und (&&), Oder (||) und Nicht (!)auf boolean
§ Es gelten die bekannten Vorrangregelnund es dürfen Klammern gesetzt werden
Informatik 1 / Kapitel 4: Algorithmen
14
4.1.5 Verzweigungen§ RAM-Programme kannten (bedingte) Sprungbefehle, wir
mussten das Ziel des Sprungs genau festlegen undes waren nur Vergleiche gegen Null möglich
§ Unser Pseudocode kennt eine komfortablere Verzweigung
§ Gilt die Bedingung werden die Befehle in A ausgeführt,andernfalls die Befehle in B
Informatik 1 / Kapitel 4: Algorithmen
1 if ( Bedingung ) {2 A3 } else {4 B5 }
15
Verzweigungen§ Die Bedingung wird als logischer Ausdruck angegeben
und darf die folgenden Operatoren enthalten
§ Vergleiche (==, !=, >=, <=, < und >)
§ Boolesche Operatoren (&&, || und !)
§ Klammern
§ Die geschweiften Klammern ({}) markieren einen Gültigkeitsbereich (scope) und enthalteneine Folge von Befehlen
§ Variablen, die innerhalb eines Gültigkeitsbereichsdeklariert werden, sind nur darin sichtbar
Informatik 1 / Kapitel 4: Algorithmen
16
Verzweigungen§ Verzweigungen können geschachtelt werden, zudem
kann der else-Teil einer Verzweigung entfallen
§ Den Rückgabewert eines Programms legen wir in unserem Pseudocode mittels return fest
Informatik 1 / Kapitel 4: Algorithmen
17
Verzweigungen§ Beispiel: Nehmen wir an, dass bereits drei ganzzahlige
Variablen x, y und z deklariert sind, so können wir deren Maximum (vgl. letztes RAM-Programm) bestimmen als
Informatik 1 / Kapitel 4: Algorithmen
19
4.1.6 Schleifen§ RAM-Programme mussten Schleifen mit Hilfe von
Sprungbefehlen realisieren
§ Unser Pseudocode kennt zwei Arten von Schleifen
§ while-Schleife
führt die Befehle in A aus, solange die Bedingung gilt
Informatik 1 / Kapitel 4: Algorithmen
1 while ( Bedingung ) {2 A3 }
20
Schleifen§ Beispiel: Summieren der Zahlen von 1 bis 100
Informatik 1 / Kapitel 4: Algorithmen
1 int n = 100;2 int sum = 0;3 while (n > 0) {4 sum = sum + n;5 n--;6 }7 return sum;
21
Schleifen§ for-Schleife
führt die Befehle in A aus, solange die Bedingung gilt.Die Initialisierung wird vor dem ersten Schleifendurchlaufund die Änderung nach jedem Durchlauf ausgeführt
Informatik 1 / Kapitel 4: Algorithmen
1 for( Initialisierung ; Bedingung ; A nderung ) {2 A3 }
22
Schleifen§ Beispiel: Summieren der Zahlen von 1 bis 100
Informatik 1 / Kapitel 4: Algorithmen
1 int n = 100;2 int sum = 0;3 for(int i=1; i <= n; i++) {4 sum = sum + i;5 }
23
4.1.7 Funktionen§ Funktionen (Methoden in Java) erlauben uns, häufig
verwendete Folgen von Befehlen zu kapselnund werden durch Angabe einer Signaturwie folgt deklariert
§ Datentyp des Rückgabewerts(void, falls es keinen solchen gibt)
§ Name der Funktion (Buchstaben und Unterstrich)
§ Argumente mit Namen und Datentyp
§ Den Rückgabewert einer Funktion legen wir inunserem Pseudocode mittels return fest
Informatik 1 / Kapitel 4: Algorithmen
24
Funktionen§ Beispiel: Summieren der Zahlen von 1 bis n als Funktion
Informatik 1 / Kapitel 4: Algorithmen
1 int sum_one_to_n (int n) {2 int sum = 0;3 for(int i=1; i <= n; i++) {4 sum = sum + i;5 }6 return sum;7 }
25
4.1.9 Kommentare§ Zur Erklärung von Programmen kennt unser Pseudocode
zwei Arten von Kommentaren
§ Einzeilige Kommentare werden durch // angezeigt
§ Mehrzeilige Kommentare beginnen mit /*und enden mit */
Informatik 1 / Kapitel 4: Algorithmen
1 // Einzeiliger Kommentar zur Erkl arung
1 /*2 * Mehrzeiliger Kommentar zur Erkl arung3 */
26
Berechnung von Zweierpotenzen§ Beispiel: Wir implementieren nun die einfache Berechnung
von Zweierpotenzen in Pseudocode; als Argument solleine Variable int n zur Verfügung stehen
Informatik 1 / Kapitel 4: Algorithmen
28
4.1.8 Mächtigkeit von RAM und Pseudocode§ Wir hatten gesagt, dass man mit der RAM alles, was
berechenbar ist, auch berechnen kann
§ Pseudocode und RAM sind gleich mächtig, d.h. man kannmit beiden die gleichen Probleme lösen
§ Um diese Aussage zu beweisen, müssten wir zeigen,dass wir (i) die RAM in Pseudocode und (ii) unseren Pseudocode auf der RAM simulieren können
Informatik 1 / Kapitel 4: Algorithmen
29
4.2 Suche§ Häufig muss man feststellen, ob ein bestimmter Wert k
in einer gegebenen Menge von Werten enthalten ist
(z.B. Nachschlagen einer Telefonnummer)
§ Dieses Problem nennt man Suche und wir lernen nun
zwei Algorithmen zu dessen Lösung kennen
§ Wir nehmen an, dass die gegebene Menge von Werten
aus ganzen Zahlen besteht; die Algorithmen sind
jedoch auch für andere Datentypen anwendbar,
sofern eine Ordnungsrelation definiert ist
Informatik 1 / Kapitel 4: Algorithmen
30
Ordnungsrelation§ Definition: Eine Ordnungsrelation ∘ auf einer Menge X
muss folgende Eigenschaften haben
§ reflexiv, d.h.
§ transitiv, d.h.
§ antisymmetrisch, d.h.
Informatik 1 / Kapitel 4: Algorithmen
’ x œ X : x ¶ x
’ x, y œ X : (x ¶ y) · (y ¶ x) ∆ x = y
’ x, y, z œ X : (x ¶ y) · (y ¶ z) ∆ (x ¶ z)
31
Ordnungsrelation§ Für ganzen Zahlen und Kommazahlen dient uns ≤
als Ordnungsrelation
§ Für Zeichen betrachten wir den zugehörigen Code(z.B. ASCII) und verwenden wiederum ≤ als Ordnungsrelation
Informatik 1 / Kapitel 4: Algorithmen
32
4.2.1 Lineare Suche§ Die gegebene Menge von Werten soll uns als Array
ganzer Zahlen a bereit stehen und wir möchten einen Index bestimmen, an dem der gesuchte Wert k steht
§ Ist der gesuchte Wert k nicht im Array enthalten,soll -1 zurückgegeben werden
§ Wir schreiben eine Funktion mit folgender Signatur
Informatik 1 / Kapitel 4: Algorithmen
1 int linearSearch (int [] a, int k) {2 ...3 }
33
Lineare Suche§ Idee: Durchlaufe das Array vom Anfang zum Ende und
gib den ersten Index zurück, an dem k vorkommt;wird das Ende erreicht, gib -1 zurück
Informatik 1 / Kapitel 4: Algorithmen
1 int linearSearch (int [] a, int k) {2 for(int i = 0; i < a. length ; i++) {3 if (a[i] == k) { // k gefunden4 return i;5 }6 }7 return -1; // Ende erreicht8 }
34
Lineare Suche§ Beispiel: Betrachte folgendes Array ganzer Zahlen
Suche nach k = 7
Suche nach k = 8
Informatik 1 / Kapitel 4: Algorithmen
3 1 7 2 5 1 9a
3 1 7 2 5 1 9a 2
3 1 7 2 5 1 9a -1
35
Laufzeit der lineare Suche§ Wir messen die Laufzeit eines Programms in Pseudocode
als die Anzahl der abgearbeiteten einfachen Befehle(Wertzuweisungen, Operationen, Vergleiche, Rückgabe)
§ Die Laufzeit der linearen Suche hängt offensichtlichvon der Anzahl n der Werte im Array a sowiedem konkreten Wert von k ab
§ Im schlechtesten Fall (worst case) wird das Arrayvollständig durchlaufen und jeder Wert darinmit dem gesuchten Wert verglichen
Informatik 1 / Kapitel 4: Algorithmen
36
Laufzeit der lineare Suche§ Zur Initialisierung der Schleife wird ein Befehl ausgeführt
§ Für jeden im Array betrachten Wert werden ausgeführt
§ die Überprüfung der Schleifenbedingung (Zeile 2)
§ der Vergleich des Werts mit dem gesuchten Wert (Zeile 3)
§ das Inkrement der Schleifenvariable (Zeile 2)
§ Zudem wird genau ein Wert zurückgegeben
§ Bei Abbruch der Schleife die Überprüfung (Zeile 2)
§ Im schlechtesten Fall werden 3n + 3 Befehle abgearbeitet
§ Die Zeitkomplexität der linearen Suche liegt damit in O(n)
Informatik 1 / Kapitel 4: Algorithmen
37
Zusammenfassung§ Algorithmen als systematische Vorgehensweise
zur Lösung eines formal definierten Problems
§ Pseudocode gibt uns eine Möglichkeit, Algorithmen kompakter und verständlicher zu beschreiben,als dies mit RAM-Programmen möglich ist
§ Lineare Suche findet einen bestimmten Wert ineiner gegebenen Menge von Wertenund hat lineare Laufzeit
Informatik 1 / Kapitel 4: Algorithmen