Algorithmen & Datenstrukturen
Prof. Dr. Wolfgang Schramm
ALGORITHMEN-‐ PARADIGMEN
4. Kapitel
1
Übersicht
1. Einführung 2. Algorithmen 3. EigenschaFen von
Programmiersprachen 4. Algorithmenparadigmen 5. Suchen & SorNeren 6. Hashing 7. Komplexität von Algorithmen 8. Abstrakte Datentypen (ADT) 9. Listen 10. Bäume 11. Graphen
2
Lernziele des Kapitels
¨ Sie verstehen was ein Algorithmenparadigma ist.
¨ Sie lernen verschiedene Algorithmenparadigmen kennenlernen und können diese jeweils in eine Anwendung umsetzen.
2
3
Inhalt
o Paradigma (Begriff) o WichNge Algorithmenparadigmen
¤ applikaNve (funkNonale), ¤ imperaNve, ¤ objektorienNerte, ¤ logische.
4
Paradigma, Algorithmenparadigma, Programmierparadigma
o Paradigma (in der WissenschaFstheorie) = Denkmuster, welches das
wissenschaFliche Weltbild einer Zeit prägt.
o Algorithmenparadigma = Denkmuster/Denkmodell, das die Formulierung und
den Entwurf von Algorithmen (und damit letztendlich auch den von Programmier-‐
sprachen) grundlegend prägt.
o Programmierparadigma (Programmiersprache vs. Algorithmus !) n Ein Programmierparadigma legt das einer Programmiersprache zugrundeliegende Prinzip fest.
n Programmierparadigmen entsprechen Algorithmenparadigmen bzw. setzen diese um.
n I.d.R. folgt eine Programmiersprache mehreren Programmierparadigmen, es gibt jedoch ebenso i.d.R. ein „herausragendes“.
5
WichNge Algorithmenparadigmen
o Grundlegende: ¤ applikaNve (funkNonale), ¤ ImperaNve.
o … weitere: ¤ objektorienNerte, ¤ logische, ¤ geneNsche, ¤ parallele, ¤ neuronale, ¤ agentenorienNerte.
Algorithmen
6
ApplikaNve Algorithmen
o ApplikaNve Algorithmen ...
sind eine Verallgemeinerung der FunkNonsauswertung mathemaNsch noNerter FunkNonen. In ihnen spielt Rekursion eine wesentliche Rolle.
ApplikaNver Algorithmus = Liste von FunkNonsdefiniNonen.
Eine FunkNon muss nicht für alle Eingaben definiert sein, insbesondere führt eine nicht terminierende Berechnung zu einem undefinierten Ergebnis (die FunkNon heißt dann parNelle FunkNon).
Beispiele:
FakultätsfunkDon
x! = x * (x-‐1) * (x-‐2) .... 2 * 1 für x > 0 -‐ mathemaNsche DefiniNon
fac(x) = if x ≤ 0 then 1 else x * fac(x-‐1) -‐ applikaNver Algorithmus
„Lazy evaluation“
Rekursion
„if“ ist eine Funktion! if (a, b, c)
sieht jedoch sehr ungewohnt aus.
7
ApplikaNve Algorithmen – DefiniNon (informell) 1/3
o DefiniNon Term (vom Typ int): n Ein „üblicher“ arithmeNscher Ausdruck mit Zahlen und Unbekannten. n Ein Ausdruck der Form if A then B else C fi (B, C vom Typ int). n Eine FunkNon vom Typ int. n Es gelten „übliche“ Vereinfachungsregeln (Auswertung).
¤ Andere Typen analog.
o DefiniNon FunkNon → Es sind v1, …, vn UnbesNmmte vom Typ t1, …, tn, sowie
T(v1, …, vn) ein Term mit dem Ergebnistyp tT, dann heißt f (v1, …, vn) = T (v1, …, vn) eine FunkNon vom Typ tT.
Formale Parameter
Funktionsausdruck
8
ApplikaNve Algorithmen – DefiniNon (informell) 2/3
o DefiniNon applikaNver Algorithmus ¤ Ein applikaNver Algorithmus ist eine Liste von FunkNonsdefiniNonen
f1 (v11, …, v1n1) = T1 (v11, …, v1n1) … fm (v11, …, v1nm) = Tm (v11, …, v1nm)
¤ Die Auswertung der ersten FunkNon f1 ist die Bedeutung des
Algorithmus.
o Anmerkung ¤ Es gibt keine Variablen, keine Zuweisung. ¤ Wesentlich: Rekursion.
Beispiele: Lisp
Scheme
9
ApplikaNve Algorithmen – DefiniNon (informell) 3/3
o DefiniNon parNelle FunkNon ¤ Eine FunkNon heißt parNell,
wenn sie für einige Eingabewerte nicht definiert ist.
o Anmerkung ¤ Eine FunkNon ist nicht definiert, wenn sie
n nicht terminiert oder n einen Fehler liefert.
10
ApplikaNve Algorithmen -‐ Beispiel
Euklid‘scher Algorithmus zur BesNmmung des größten gemeinsamen Teilers zweier natürlicher Zahlen (die sind immer > 0).
ggT(x,x) = x -‐ mathemaNsche Gesetzmäßigkeiten
ggT(x,y) = ggT(y,x)
ggT(x,y) = ggT(x,y-‐x) für x < y
ggT(x,y) = if (x ≤ 0 ) or (y ≤ 0) then
ggT(x,y)
else if x = y then -‐ applikaNver Algorithmus
x
else if x > y then
ggT(y,x)
else
ggT(x, y-‐x)
fi;
11
Diskussion
• Nehmen wir an, dass wir einen Rechner haben, der nur die AddiNon beherrscht. Wie können wir trotzdem eine MulNplikaNon realisieren?
• Stellen Sie dazu mathemaNsche Regeln auf.
• Setzen Sie die Regeln um in einen applikaNven Algorithmus.
12
ApplikaNve Algorithmen -‐ Aufgabe
o Nehmen wir an, dass wir einen Rechner haben, der nur die AddiNon beherrscht. Wie können wir trotzdem eine MulNplikaNon realisieren?
o Stellen Sie dazu mathemaNsche Regeln auf.
o Setzen Sie die Regeln um in einen applikaNven Algorithmus.
mos (a, b) = mos (b, a) - mathematische Definition
mos (a, 0) = 0
mos (a, b) = mos (a, b-1) + a für b > 0
= mos (a, b+1) – a für b < 0
13
ImperaNve Algorithmen
o ImperaNve Algorithmen ...
basieren auf einem einfachen Maschinenmodell mit änderbaren Werten. Hier werden primär Schleifen und AlternaNven als Kontrollbausteine eingesetzt.
Der Algorithmus wird ausgeführt auf einem „üblichen“ Rechner, d.h. n Es gibt Variable, die einen Wert speichern können. n Es gibt Anweisungen, die einen Wert ändern können.
o Anmerkung ¤ Basiert auf der von-‐Neumann-‐Architektur.
14
ImperaNve Algorithmen -‐ Beispiel
Beispiel fac (x: int): var y: int; y := 1; while x > 1 do y := y*x; x := x-1; od; output y;
(2, 6) (1, 6)
Zustand (x, y)
(3, -) (3, -) (3, 1)
(3, 3) (2, 3)
Aufruf: fac (3)
Ausgabe: 6
15
ImperaNve Algorithmen – DefiniNonen 1/3
o DefiniNon Variable ¤ Eine Variable hat einen Namen und einen – veränderlichen – Wert. ¤ Der Wert kann durch eine Zuweisung eines Terms geändert werden.
o DefiniNon Zustand ¤ Der Zustand eines Rechners zu einem besNmmten Zeitpunkt ist die
Zuordnung von Werten zu allen Variablen.
o Anmerkung ¤ Ein Term bei der imperaNven Algorithmen enthält Variable stax
Unbekannte.
16
ImperaNve Algorithmen – DefiniNonen 2/3
o DefiniNon transformierter Zustand ¤ Ein transformierter Zustand Zneu ist der neue sich ergebende Zustand
nach der Durchführung einer Zuweisung in einem alten Zustand Zalt. ¤ Für den transformierten Zustand gilt:
n Der Wert einer Variabeln V im Zustand Zneu ist n der gleiche wie in Zalt, falls die Zuweisung die Variable
nicht betroffen hat. n der Wert des Terms der Zuweisung, falls die Zuweisung an
diese Variable ausgeführt wurde.
17
ImperaNve Algorithmen – DefiniNonen 3/3
o DefiniNon Anweisung (informell) ¤ Eine Anweisung ist ein Algorithmus-‐Baustein mit ent-‐sprechenden
Zustandsänderungen.
o DefiniNon imperaNver Algorithmus ¤ Ein imperaNver Algorithmus ist eine Anweisung. ¤ Die Ausführung eines imperaNven Algorithmus ist eine Folge von
Zuständen, wobei jeder Zustand der transformierte Zustand seines Vorgängers ist.
¤ Die Bedeutung (SemanNk) des Algorithmus ist gegeben durch den letzten Zustand.
Beispiele: C
Fortran
18
ImperaNve Algorithmen – prozedurale Programmierung
o Anmerkung ¤ Anweisung
n Ein Programm ist i.d.R. keine elementare OperaNon, sondern eine Folge (Sequenz) von OperaNonen.
n WichNges Strukturierungsmixel: Prozeduren
(à imperaNve oder prozedurale Programmierung) ¤ Bedeutung
n OF nur Wert der Ausgabevariablen.
19
Diskussion
¨ Schreiben Sie den Euklidischen Algorithmus in imperaNver Form.
20
ImperaNve Algorithmen -‐ Beispiel
Berechnung der Fakultät: fac: var x, y: int;
y := 1; while x > 1 y := y*x; x := x-‐1; od; output y;
Euklid‘scher Algorithmus (ggT) – eine mögliche Lösung: ggT: var x, y: int;
input x,y; while x ≠ y while x > y x := x-‐y; od; while x < y y := y-‐x; od; od; output x;
21
ObjektorienNerte Programmierung 1/2
v Idee
¤ Es gibt eine Menge von Objekten (Einheit von Daten und FunkNonen).
¤ Ein Objekt hat einen Zustand.
¤ Die Objekte kommunizieren.
¤ Es gibt ein ausgezeichnetes Start-‐Objekt.
¤ Die Ausführung ergibt eine Folge von verteilten Zuständen.
Beispiele: C++ Java
Smalltalk
22
ObjektorienNerte Programmierung 2/2
o Beispiel
Kapselung: Implementierung
unsichtbar
Math
+fac (int i):int
Polymorphie à Daten Dynamische Bindung à Methoden
Object
+equals
Vererbung
23
Logische Algorithmen 1/2
v Idee ¤ Es gibt eine Menge Formeln. ¤ Es gibt eine Menge logischen Fakten und Regeln
(Fakt = Formel mit Konstanten). ¤ Es gibt eine Anfrage:
n Formel mit Konstanten: Formel verifizieren. n Formel mit Variablen: Belegung für Variable suchen.
o Beispiel ¤ Fakten: Sohn (Peter, Rainer); Sohn (Rainer, Walter) ¤ Regeln: Sohn (a, b) ∧ Sohn (b, c) à Enkel (a, c) ¤ Anfrage: Sohn (Peter, Walter)? ⇒ false
Enkel (Peter, a)? ⇒ a = Walter
24
Logische Algorithmen 2/2
o Auswertung ¤ Backtracking (vereinfacht)
n Gegeben: Anfrage ohne bzw. mit einer Variablen. n Vorgehen:
1. Wähle den ersten Fakt. 2. Teste den gewählten Fakt,
d.h. wird die Anfrage durch Einsetzen wahr? 3. Falls ja à ferDg (true bzw. Belegung)
(mit erneutem Aufruf nächste Belegung finden). 4. Falls nein à wähle den nächsten Fakt;
weiter mit 2. 5. Falls kein Fakt mehr verfügbar
à ferDg (false bzw. keine Lösung).
25
Noch Fragen?
25