26
Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm ALGORITHMEN PARADIGMEN 4. Kapitel

ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

Algorithmen  &  Datenstrukturen  

Prof.  Dr.  Wolfgang  Schramm  

ALGORITHMEN-­‐  PARADIGMEN  

4.  Kapitel  

Page 2: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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  

Page 3: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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

Page 4: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

3  

Inhalt  

o  Paradigma  (Begriff)  o  WichNge  Algorithmenparadigmen  

¤  applikaNve  (funkNonale),  ¤  imperaNve,  ¤  objektorienNerte,  ¤  logische.  

Page 5: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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“.  

Page 6: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

5  

WichNge  Algorithmenparadigmen  

o  Grundlegende:  ¤  applikaNve  (funkNonale),  ¤  ImperaNve.  

o  …  weitere:    ¤  objektorienNerte,  ¤  logische,  ¤  geneNsche,  ¤  parallele,  ¤  neuronale,  ¤  agentenorienNerte.  

Algorithmen  

Page 7: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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.

Page 8: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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

Page 9: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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

Page 10: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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.  

Page 11: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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;  

Page 12: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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.  

Page 13: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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

Page 14: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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.  

 

Page 15: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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

Page 16: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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.  

Page 17: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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.  

Page 18: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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

Page 19: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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.  

Page 20: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

19  

Diskussion  

¨  Schreiben  Sie  den  Euklidischen  Algorithmus  in  imperaNver  Form.  

 

Page 21: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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;  

Page 22: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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

Page 23: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

22  

ObjektorienNerte  Programmierung  2/2  

o  Beispiel  

Kapselung: Implementierung

unsichtbar

Math

+fac (int i):int

Polymorphie à Daten Dynamische Bindung à Methoden

Object

+equals

Vererbung

Page 24: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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  

Page 25: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

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).  

Page 26: ALGORITHMEN,- 4.Kapitel PARADIGMEN-schramm/ads/files/Kapitel04.pdf · 1 Übersicht 1. Einführung-2. Algorithmen-3. Eigenschaen-von-Programmiersprachen-4. Algorithmenparadigmen-5

25  

Noch  Fragen?  

25