• Keine Ergebnisse gefunden

Grundlagen der Algorithmen und Datenstrukturen

N/A
N/A
Protected

Academic year: 2022

Aktie "Grundlagen der Algorithmen und Datenstrukturen"

Copied!
29
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Grundlagen der Algorithmen und Datenstrukturen

Christian Scheideler + Helmut Seidl

SS 2009

(2)

Organisatorisches

• Vorlesung:

Di 12:00 – 13:30 MI HS 1 Do 12:00 – 12:45 MI HS 1

• Übungen: 34 Alternativen (max. 15 Teiln.) 4 englische

• Übungsleitung: Sylvia Pott, Vivian Prinz

uebungsleitung-gad@mailseidl.in.tum.de

(3)

Organisatorisches

• Webseite: www2.in.tum.de/hp/?GAD09

• Literatur (u.a.):

Kurt Mehlhorn und Peter Sanders.

Algorithms and Data Structures – The Basic Toolbox

Springer Verlag, Berlin, 2008.

Webseite enthält Vorlesungsfolien und Übungsblätter

(4)

Organisatorisches

• Übungsblätter:

Jede Woche ein Übungsblatt.

Ausgabe: jeden Dienstag auf der Kurswebseite Abgabe: jeden Dienstag vor der Vorlesung

• Eine Klausur:

voraussichtlich am 25. Juli (Samstag) Anmeldung über TUM Online

• Endnote:

Klausur + Bonus

(5)

Einführung

Thema: Algorithmen und Datenstrukturen

• Was ist ein Algorithmus?

• Was ist eine Datenstruktur?

• Einführende Beispiele

Theorie? Muss ich

Programme

schreiben?

(6)

Was ist ein Algorithmus?

Definition: Ein Algorithmus ist eine formale

Handlungsvorschrift zur Lösung von Instanzen eines Problems in endlich vielen Schritten.

Algorithmus: von Muhammad Al Chwarizmi

(~783-850), dessen arabisches Lehrbuch “Über das Rechnen mit indischen Zahlen” in lateini-

scher Übersetzung mit “Dixit Algorismi” begann.

Im Mittelalter wurde daraus “algorismus” als Bezeichnung für die Kunst des Rechnens mit den arabischen (bzw. indischen) Ziffern

“algorismus” ! “Algorithmus”

(7)

Was ist ein Algorithmus?

Eingabe

Algorithmus

Ausgabe

(8)

Beispiele

• Kochrezept

Eingabe: Zutaten, Algorithmus: Rezept, Ausgabe: Essen

• Bauanleitung

Eingabe: Teile, Algorithmus: Bauanleitung, Ausgabe: Schrank

Weitere Beispiele (später):

• Ausweg aus Labyrinth

• Zeichnen eines Kreises

(9)

Was ist eine Datenstruktur?

Definition: Eine Datenstruktur ist eine

Anordnung / Verknüpfung von Daten, um den Zugriff auf diese und ihre Verwaltung geeignet zu ermöglichen.

Datenstruktur

Operation 1

Operation 2

Operation 3

(10)

Beispiele

Datenstrukturen für schnelles Suchen:

• Lexikon

Operation: Suche(Name)

(Algo mit Eingabe “Name”, Ausgabe Info zu “Name”)

• Kalender

Operation: z.B. Wochentag(Datum)

(Algo mit Eingabe “Datum”, Ausgabe

Wochentag des Datums)

(11)

Softwareentwicklung

Problem

Modellierung

Algorithmen und Datenstrukturen

Implementierung

(12)

Grundsätzliche Probleme

Korrektheit

Effizienz Komplexität

(13)

Effizienz

Wichtig: Laufzeit und Speicheraufwand Warum?

• Riesige Datenmengen (Bioinformatik)

• Echtzeitanwendungen (Spiele) Ziel der Vorlesung:

Grundstock an effizienten Algorithmen und Datenstrukturen für Standardprobleme

(14)

Beispiele

Einige sehr effiziente Algorithmen:

• Ausweg aus Labyrinth

• Zeichnen eines Kreises

(15)

Ausweg aus Labyrinth

Es ist dunkel! Keine Taschenlampe!

(16)

Ausweg aus Labyrinth

1. Versuch: Linke-Hand-Regel

(17)

Ausweg aus Labyrinth

Zwecklos! Ich bin eingemauert…

(18)

Ausweg aus Labyrinth

Pledge-Algorithmus:

setze Umdrehungszähler auf 0

wiederhole, bis Ausgang gefunden

– geradeaus, bis Wand erreicht

– Linke-Hand-Regel bis Umdrehungszähler=0 (Linksdrehung um 90 Grad: Zähler-1,

Rechtsdrehung um 90 Grad: Zähler+1)

Funktioniert, solange das Labyrinth rechtwinklig

(19)

Ausweg aus Labyrinth

Hurra! Geschafft!

0 +1

0

+1

+2

+1

(20)

Algorithmusbuch

Einige dieser Algorithmen sind erschienen in

B. Vöcking, H. Alt, M.

Dietzfelbinger C. Scheideler, H. Vollmer, D. Wagner

Taschenbuch der Algorithmen Springer Verlag, Berlin, 2008

(21)

Kreiszeichnen

Wie zeichne ich schnell Kreise im Computer?

(22)

Kreiszeichnen

Naiver Ansatz: verwende sin und cos Für α =0...2π :

α

x=R cos(α )

y=R sin(α ) R

-R

(23)

Kreiszeichnen

plot(x,y): setze Punkt bei Position (x,y) Algorithmus Kreis1:

for (1=0; i<n; i++)

plot(R*cos(2*pi*i/n), R*sin(2*pi*i/n));

Kreisumfang: U=2π R. Bei Pixelbreite von 1 Längeneinheit reicht dann n=7R.

Problem: Funktionen sin, cos sind teuer!

(24)

Kreiszeichnen

Besserer Ansatz:

x2+y2=R2, also y=±sqrt(R²-x²) Algorithmus Kreis2:

for(x=-R;x<=R;x++){

y=sqrt(R*R-x*x);

plot(x,y);

plot(x,-y);

}

x y

-R R

(25)

Kreiszeichnen

Noch besser: Ausnutzung von Spiegelungen

R (x,y)

(-x,y)

(y,-x) (-y,-x)

(y,x) (-y,x)

zu berechnen

(26)

Kreiszeichnen

Aber: Algo verwendet immer noch Wurzel Kommen wir mit *,+,- aus?

innerhalb von Kreis?

ja: x=x+1;

nein: x=x+1; y=y-1;

(27)

Kreiszeichnen

Mittelpunkt des ersten (x,y)=(0,R)

Position seines Punkts: (0,R-1/2) (1x1-Quadrat)

Test, ob (x,y) innerhalb Kreis:

teste, ob F(x,y):= x2+y2-R2 < 0 ist

Also Test, ob mit Punkt (0,R-1/2) noch innerhalb des Kreises ist: 02+(R-1/2)2-R2 = -R+0.25 < 0?

Es gilt: F(x+1,y) = F(x,y)+2x+1

F(x+1,y-1) = F(x,y)+2x-2y+2

(28)

x=0; y=R; F=-R+0.25;

plot(0,R); plot(R,0); plot(0,-R); plot(-R,0);

while (x<y) { x=x+1;

F=F+2*x-1;

if (F>=0) { // bei (x,y) hat nicht innerhalb y=y-1; // deshalb zu (x,y-1)

F=F-2*y;

}plot(x,y); plot(y,x); plot(-x,y); plot(y,-x);

plot(x,-y); plot(-y,x); plot(-x,-y); plot(-y,-x);

}

Bresenham Algorithmus

(29)

Nächstes Kapitel

Eingabekodierung

Asymptotische Notation

Maschinenmodell

Java

Laufzeitanalyse

Einige Beispiele

Referenzen

ÄHNLICHE DOKUMENTE

Wir nennen einen Algorithmus deterministisch wenn bei gleicher Eingabe exakt dieselben Schritte/Zust¨ ande durchlaufen werden..

Auch bei guten Hash-Funktionen treten immer noch Kollisionen auf (Taubenschlagprinzip), und wir m¨ussen sie behandeln. L¨osung

I Es m¨ ussen alle 3 Pr¨ aferenzen angegeben werden..M. R¨ oger (Universit¨ at Basel) Algorithmen und

Ein (bin¨ arer) min-Heap ist ein vollst¨ andiger bin¨ arer Baum, bei dem gilt, dass der Wert in jedem Knoten kleiner gleich dem Wert seiner beiden Kindern (sofern vorhanden)

belle T der Größe m&gt;2en mittels einer zufälligen Hashfunktion h gespeichert werden, dann ist für jedes T[i] die erwartete Länge eines Laufes in T, der T[i] enthält, O(1)..

Mergen zweier Teilfolgen mittels 3 Blöcken im internen Speicher (rote Kästen):..

Zentrale Frage: Wie können wir die Knoten eines Graphen durchlaufen, so dass jeder Knoten mindestens einmal besucht

• Für jede Kante (u,v) in der sortierten Liste, teste, ob u und v bereits im selben Baum in T sind..