Sie sind auf Seite 1von 39

Algorithmen und Datenstrukturen Vorlesung

SS 2011 FH-Prof. DI Alexander Nimmervoll

Einleitung

Zu meiner Person
Email: nimm@technikum-wien.at Bro: 6.Stock, Zimmer 6.19 Tel: +43 1 333 40 77 / 242 Sprechstunden: nach Vereinbarung per Mail

Informatik - Algodat

Einleitung Lehrplan
VO Algorithmen und Datenstrukturen 1 SWS UE 1 SWS

Aufwand: 2 SWS = 3 ECTS entsprechen 75 volle Stunden (inkl. Anwesenheitszeit, Prfungsvorbereitung, Selbststudium, )

Vorlesung
geblockt 2h alle 2 Wochen Vortrag mit Diskussion
Informatik - Algodat 3

Einleitung

bung bungsprotokolle bzw. Programmierbungen in max. Zweiergruppen Die bungen werden eigenverantwortlich fertig gestellt freie Wahl der Programmiersprache fr Umsetzung von Algorithmen Abgabe ber ein WEB-Interface 3 Code Reviews innerhalb der bungseinheiten mit Prsentation der Lsungen
Informatik - Algodat 4

Einleitung Lehrziele
Entwicklung von Lsungsstrategien fr Algorithmen und komplexe Systeme mithilfe von analytischen und strukturierten Denkprozessen Verstndnis von Datenstrukturen und deren Einsatzgebieten Analyse, Design und Bewertung von Algorithmen

Informatik - Algodat

Einleitung

Benotung
schriftliche Prfung am Ende des Semesters
75 Punkte knnen erreicht werden Beispiele aus dem Vorlesungsstoff Alle Unterlagen erlaubt Positiv ab 38 Punkten

bungsbeispiele
3 Code Reviews zu je 25 Punkten Positiv ab 38 Punkten Versumen eines Code Reviews ohne rtztliche Besttigung = 0 Punkte auf dieses Review

Termine siehe Semesterplan


Informatik - Algodat 6

Einleitung

Gesamtnote
50% Gewichtung Prfung 50% Gewichtung Code Reviews Beide Teile mssen positiv sein! Mglichkeit eines Programmierprojekts anstelle der Vorlesungsprfung

Informatik - Algodat

Literatur
Skriptum Algorithmen und Datenstrukturen (Wirtschaftsinformatik) Powerpoint Folien (Notizen machen!!!) Java Applets Online Tutorials
http://www.netzmafia.de/skripten/ad http://ad.informatik.uni-freiburg.de/ bibliothek/books/ad-buch/

http://ivs.cs.uni-magdeburg.de/ sw-eng/agruppe/lehre/ead.shtml
Informatik - Algodat 8

Literatur

Sedgewick: Algorithmen in C
Addison-Wesley Auch als JAVA Version verfgbar

Gunter Saake, Kai-Uwe Sattler:


Algorithmen und Datenstrukturen
Eine Einfhrung mit Java, dpunkt Verlag

Hopcroft, Ullman: Data Structures


and Algorithms
Addison-Wesley
Informatik - Algodat 9

Algorithmen und Datenstrukturen

LV-Inhalte

LV-Inhalte

Algorithmen und Datenstrukturen


Wiederholung und Vertiefung
Aufwandsabschtzung, Sortieralgorithmen Listen,Stack,Queue Rekursion

Suchalgorithmen Parser Bume Graphen Optimierungsprobleme


Informatik - Algodat 11

Algorithmen und Datenstrukturen

Wiederholung Sortieralgorithmen, Aufwand und Effizienz

Komplexitt Aufwandsabschtzung
Komplexitt: Abschtzung des Aufwandes der Berechnung auf einem Computer = Laufzeit des Algorithmus Wie hufig werden bestimmte Operationen durchgefhrt? einfache Anweisung: 1 mal for Schleife von 1 bis n: n mal doppelt verschachtelte for Schleife: n mal primitive Operationen werden nicht bercksichtigt z.B.: Zhlvariablen bei Schleifen Funktionsaufruf Indexberechnungen

Informatik - Algodat

13

Komplexitt O-Notation
Der Aufwand wird als mathematische Funktion der von einem Algorithmus zu verarbeiteten Datenmenge (N) dargestellt Betrachtet wird das Verhalten des Aufwandes bei immer grer werdenden N = asymptotischer Verlauf der Funktion Abschtzung gilt also nur fr groe Datenmengen, analysiert wird die Ordnung von Algorithmen Beispiel:
Braucht Algorithmus A fr doppelt so viele Daten doppelt so lange und Algorithmus B hingegen viermal solange: Ordnung unterschiedlich Ist Algorithmus B jedoch immer nur um eine Konstante langsamer, z.B. 50%, haben beide trotzdem die gleiche Ordnung
Informatik - Algodat 14

Komplexitt O-Notation Definition


O-Notation von Landau und Bachmann Ein Algorithmus g(N) (Funktion ber der Datenmenge N) wird als O(f(N)) bezeichnet, wenn Konstanten c0 und N0 (natrliche Zahlen) exisitieren, sodass: g(N) < c0 *f(N) fr alle N > N0 g(N) hat die Ordnung f(N) f(N) ist obere Schranke fr den asymptotischen Verlauf des Aufwands c0 und N0 sind unbekannt und beliebig gro
keine Bedeutung fr kleine N

Informatik - Algodat

15

Komplexitt O-Notation
Aufwand O(1) O(ld N) O(N) O(N) O(N*ld N) O(N) O(Nk) O(2N) O(N!) Bezeichnung konstanter Aufwand logarithmischer Aufwand Aufwand mit Wurzel N linearer Aufwand quasilinearer Aufwand quadratischer Aufwand polynomieller Aufwand exponentieller Aufwand faktorieller Aufwand am schlechtesten Einstufung optimal

Informatik - Algodat

16

Komplexitt O-Notation Wachstumstabelle fr den jeweiligen Komplexittsbereich


N 2 4 8 16 32 ld N 1 2 3 4 5 N * log N 2 8 24 64 160 N 4 16 64 256 1024 2N 4 16 256 65536 4294967296

Informatik - Algodat

17

Komplexitt O-Notation Rechenregeln zur Vereinfachung O(k*f(N)) = O(f(N))


konstante Faktoren spielen keine Rolle z.B. O(100*N) = O(N)

O(logaN) = O(ld N)
Basis des Logarithmus spielt keine Rolle = Konstante

O(f(N)+g(N)) = O(max<f(N),g(N)>)
Nur der aufwendigste Teil ist relevant z.B. O(N+N) = O(N)

Beispiel:
O(17N+3N+100) = ?
Informatik - Algodat 18

Sortieralgorithmen

Wie lautet der Aufwand bekannter Sortierverfahren nach O-Notation? Best case/Worst case ? Ist Quicksort immer schnell?

Informatik - Algodat

19

Was bedeutet Effizienz?

Probleme kann man nie mit derselben Denkweise lsen, durch die sie entstanden sind. [A. Einstein] Space, time and probability all have axes along which it is possible to move. [D. Adams] If a program is not correct, it matters little how fast it runs. [B. Kernighan und P. Plauger]

Informatik - Algodat

20

Sortieralgorithmen

Beispiel Datei mit maximal n positiven ganzen Zahlen, jede kleiner als n (n = 107) gesucht: sortierte Liste der Eingabezahlen sehr wenig Hauptspeicher (wird durch andere Applikationen belegt) beliebig Plattenspeicher Laufzeit ist kritisch und daher mglichst kurz alle Zahlen sind voneinander unterschiedlich
Informatik - Algodat 21

Algorithmen und Datenstrukturen

Suchalgorithmen

Motivation Das Suchen ist eine der wichtigsten Operationen, die man mit Computern ausfhren mchte Man sucht zum Beispiel:
Suchbegriffe in Suchmaschinen Wrter in einem Wrterbuch Stichwrter in einer Enzyklopdie Telephonnummern im Telephonverzeichnis Kontonummern, Personalnummern,

Informatik - Algodat

23

Suchalgorithmen Einfhrung schnelle Suche nach eindeutigen Schlsselwerten bei einer groen Anzahl von Daten notwendig
Jeder Datensatz wird durch einen eindeutigen Schlssel reprsentiert z.B. Studentendaten: Matrikelnummer als Schlssel

Datenstrukturen fr Suchalgorithmen
Felder (Arrays) Lineare Listen Hashtabellen Suchbume Heaps

Informatik - Algodat

24

Sequentielle Suche - unsortiert


das einfachste Suchverfahren: Sequentielle oder lineare Suche
N Daten in einem Feld keine Voraussetzungen (unsortiertes Feld)

Suche M (i=4)

= M?

A S E A R C H I N G E X AM P L E 0 1 2 3 4 5 6 7 8 9 10 111213 14 15 16
Aufwandsabschtzung:
Schlechtester Fall: N Vergleiche = O(N) Bester Fall: 1 Vergleich = O(1) Durchschnittlicher Fall (bei erfolgreicher Suche): N/2 Vergleiche = O(N) Durchschnittlicher Fall (bei erfolgloser Suche): N Vergleiche = O(N)

Informatik - Algodat

25

Sequentielle Suche - sortiert


Sequentielle oder lineare Suche in einem sortierten Feld:
N Daten in einem Feld Voraussetzung: Sortierung

Suche M (i=4)

= M?

AAA C E E E GH I LMN P R S X 0 1 2 3 4 5 6 7 8 9 10 111213 14 15 16


Aufwandabschtzung:
Schlechtester Fall: N Vergleiche = O(N) Bester Fall: 1 Vergleich = O(1) Durchschnittlicher Fall (bei erfolgreicher Suche): N/2 Vergleiche = O(N) Durchschnittlicher Fall (bei erfolgloser Suche): auch N/2 Vergleiche = O(N)

Informatik - Algodat

26

Binre Suche
Binre Suche:
Prinzip: Teile und Herrsche (Divide and Conquer) Halbschrittverfahren Teile die Datenstze in zwei Hlften Bestimme, welchem der zwei Teile der gesuchte Schlssel angehrt Durchsuche nur mehr diesen Teil und wiederhole die Aufteilung

Suche M A A A C E E E i=8 G H I I I L M N i=12 L M N L M P P R R S S X X

M 10 11 12 13 14 15 16
27

Informatik - Algodat

Binre Suche
Implementierung:
int f[MAX]; // Feld in dem gesucht wird int binsearch(int a, int b, int key) { int m; if (b<a) return -1; // nicht gefunden m=(a+b)/2; if (key<f[m]) return binsearch(a,m-1,key); else if (key>f[m]) return binsearch(m+1,b,key); else return m; } int gefunden=binsearch(0,MAX-1,suchkey);

Aufwandabschtzung:
Schlechtester Fall: ld N Vergleiche = O(ld N) Bester Fall: 1 Vergleich = O(1) Durchschnittlicher Fall (bei erfolgreicher Suche): ld N Vergleiche = O(ld N) Durchschnittlicher Fall (bei erfolgloser Suche): auch ld N Vergleiche = O(ld N)
Informatik - Algodat 28

Interpolationssuche
Interpolationssuche:
Verbesserung der binren Suche Teilen der Datenstze nicht immer in der Mitte, sondern in einem sinnvoll interpolierten Intervall bei gleichmiger Schlsselverteilung Aufwand O(log log N)

Berechnung:
x...aktueller Platz L...Linker Rand des Intervalls a[L]...Wert an der Stelle L R...Rechter Rand des Intervalls a[R]...Wert an der Stelle R Z...zielwert

Statt x = (L+R)/2 Interpolation: x = ( L+ (z-a[L])*(R-L) ) / ( a[R] a[L] )


Informatik - Algodat 29

Interpolationssuche Suche z.B. z = 70


1. Interpolation: x=(0+(70-3)*(16-0))/(87-3)=12,7

x=13

3 8 17 22 27 30 41 45 52 53 58 70 72 76 81 85 87
2. Interpolation: x=(0+(70-3)*(12-0))/(72-3)=11,6

x=12

3 8 17 22 27 30 41 45 52 53 58 70 72
3. Interpolation: x=(0+(70-3)*(11-0))/(70-3)=11

x=11 3 8 17 22 27 30 41 45 52 53 58 70 70 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Informatik - Algodat

30

Hashtabelle Speicherung der Daten in einem normalen Array mit N Elementen (Indices 0 bis N-1) Mittels einer speziellen Funktion (Hashfunktion) wird der Schlsselwert eines Datensatzes auf einen Arrayindex abgebildet
Funktion h(S) liefert einen Index zwischen 0 und N-1 fr Schlssel S

Der Datensatz wird unter dem von der Hashfunktion berechneten Index im Array abgespeichert und kann durch Aufruf der Hashfunktion sofort wieder gefunden werden
Informatik - Algodat 31

Hashtabelle

Probleme
Wie soll ein beliebiger Schlsselwert auf einen Index von 0 bis N-1 abgebildet werden? In der Regel ist der Wertebereich der Schlssel sehr viel grer als die N mglichen Indices des Arrays Die Hashfunktion kann nicht allen mglichen Schlsselwerten unterschiedliche Indexpositionen zuweisen
Kollision wenn 2 Elementen dieselbe Position zugewiesen wird!

Wie knnen die Schlsselwerte gleichmig auf das Array verteilt werden, um den Speicherplatz optimal zu nutzen?
Informatik - Algodat 32

Hashtabelle

Anforderungen an die Hashfunktion


Minimierung von Kollisionen gleichmige Verteilung auf das gesamte Array
am besten zufllige Verteilung benachbarte Schlsselwerte sollten weit auseinanderliegende Indices bekommen

schnelle Berechnung

Beispiel
Integerzahlen als Schlsselwerte h(S)= S mod N Arraygre N sollte eine Primzahl sein, um eine gleichmige Verteilung zu erreichen

Informatik - Algodat

33

Hashtabelle Beispiel N=7 (Array mit Indices 0 bis 6) h(S)=S mod 7 Einfgen von 9,13,17,23
h(9)=9 mod 7 h(13)=13 mod h(17)=17 mod h(23)=23 mod = 7 7 7 2 = = = -> Element 6 -> Index 3 -> Index 2 -> Index landet in Index 2 6 3 ???

Index 2 ist schon belegt, Kollision!

Informatik - Algodat

34

Hashtabelle Kollisionsbehandlung Wahrscheinlichkeit fr Kollisionen nimmt mit dem Fllgrad der Hashtabelle zu Fllgrad =Anzahl der Datenstze/Tabellengre mehrere Strategien um Kollisionen zu behandeln: externe Verkettung
Elemente mit gleichem Hash-Wert werden in einer linearen Liste abgespeichert

Sondierung (Probing)
Im Falle einer Kollision wird eine alternative Position in der Tabelle selbst gesucht
Informatik - Algodat 35

Hashtabelle Kollisionsbehandlung externe Verkettung


es wird zustzlicher Speicher fr die lineare Liste bentigt Beispiel: 0 1 2 3 4 5 6

Aufwand beim Einfgen O(1)


9 17 23 Berechnung des Hashwertes Einfgen ins Array bzw. den Anfang der Liste

Aufwand beim Suchen O(1) wenn <1


13 steigt mit Fllgrad Worst Case O(N)
36

Informatik - Algodat

Hashtabelle Kollisionsbehandlung Sondierung (Probing)


Lineare Sondierung
Das Element wird einfach in der nchsten freien Zelle eingefgt (Index+1, Index+2, ) Im vorigen Beispiel landet 23 auf Index 4, da Index 2 und 3 bereits besetzt sind Beim Suchen muss nun die Tabelle solange weiter linear durchsucht werden bis der Schlssel gefunden wird oder eine leere Zelle erreicht wird Problem: Clusterbildung

Quadratische Sondierung
Berechnung der neuen Zelle: Index+1,+4,+9, vermeidet Clusterbildung

Aufwand fr Sondierung: 1/(1-)


Fllgrad 50% -> 2 Zugriffe Fllgrad 90% -> 10 Zugriffe
Informatik - Algodat 37

Hashtabelle Hashfunktionen Beispiel Hashfunktionenen in JAVA


In Java besitzt jedes Objekt die Methode hashCode() die einen Hashwert von der Speicheradresse des Objekts ableitet

eigene hashCode() Funktion fr Strings


Bildung einer gewichteten Summe der Ordinalwerte(AsCII-Code) der einzelnen Zeichen
String s mit Lnge n h(s)=s[0]*31(n-1)+s[1]* 31(n-2)++s[n-1]

"a".hashCode() = 97 "Java".hashCode() = 2301506 "java".hashCode() = 3254818


Informatik - Algodat 38

Hashtable Implementierung

Ausblick: Implementierung in JAVA


Konstruktor: public Hashtable() Methoden:
public Object put(Object key, Object value)
Falls bereits ein Wertepaar mit dem Schlssel key enthalten ist, wird der bisherige Wert gegen den neuen ausgetauscht

public Object get(Object key) public boolean contains(Object value) public boolean containsKey(Object key)

Informatik - Algodat

39