4. algorithmen - swl.htwsaar.de · 3 motivation § zwar könnten wir alle algorithmen als...

38
4. Algorithmen

Upload: others

Post on 23-Sep-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

4. Algorithmen

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

6

Inhalt§ 4.1 Code

§ 4.2 Suchen

§ 4.3 Sortieren

Informatik 1 / Kapitel 4: Algorithmen

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

18

Verzweigungen

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

27

Berechnung von Zweierpotenzen

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

38

Literatur

[1] H.-P. Gumm und M. Sommer: Einführung in die Informatik, Oldenbourg Verlag, 2012 (Kapitel 4.1)

[2] T. H. Cormen, C. E. Leiserson, R. Rivest undC. Stein: Algorithmen – Eine Einführung,Oldenbourg Verlag, 2009 (Kapitel 2)

Informatik 1 / Kapitel 4: Algorithmen