Willkommen zur Vorlesung. Algorithmen und Datenstrukturen

Willkommen zur Vorlesung Algorithmen und Datenstrukturen Zum Dozenten ● Mein Name: Andreas Berndt ● Diplom-Informatiker (TU Darmstadt) ● ● Der...
Author: Detlef Fromm
2 downloads 2 Views 129KB Size
Willkommen zur Vorlesung Algorithmen und Datenstrukturen

Zum Dozenten ●

Mein Name: Andreas Berndt



Diplom-Informatiker (TU Darmstadt)





Derzeit Software-Entwickler für WebApplikationen Derzeitige Sprachen: Java, PHP, Ruby

Organisatorisches ●

Übung 1: Mittwochs, 8:15 - 9:45 Uhr



Vorlesung: Mittwochs, 10:00 – 11:30 Uhr



Übung 2: Mittwochs, 11:45 – 13:15 Uhr





Beide Übungen in Gebäude 1, Raum 131, Vorlesung in Geb. 1, Raum 401 Web-Seite:http://www.informatik.fb2.fhfrankfurt.de/~aberndt/algorithmen

Lehrübersicht ●

Algorithmen: –



Beschreibungsformen von Algorithmen –





Definition eines Algorithmus und Anforderungen an ihn, semantische Korrektheit (natürliche Sprache, Pseudocode, Struktogramm, Datenflussdiagramm, Programmablaufplan)

Komplexitätsbetrachtungen, Berechenbarkeit: –

Platz- und Zeitkomplexität, asymptotische Notationen,



Komplexitätsmaße (worst case, average case), P-NPProblematik

Typen algorithmischer Vorgehensweisen –

(Rekursion, Greedy, Divide and Conquer, Backtracking ...)

Lehrübersicht ●



Datenstrukturen: –

elementare Datenstrukturen



lineare Standardstrukturen (Felder, Listen, Stapel, Warteschlangen)



Bäume



Mengen



Graphen

Algorithmen zu den Grundproblemen der Informatik: –

Sortieren



Hashing



Suchen

Der Algorithmus Grundlegendes

Der Algorithmus - Grundlegendes "Ein Algorithmus ist eine eindeutige, endliche Beschreibung eines allgemeinen, endlichen Verfahrens zur schrittweisen Ermittlung gesuchter Größen aus gegebenen Größen. Die Beschreibung erfolgt in einem Formalismus mit Hilfe von anderen Algorithmen und, letztlich, elementaren Algorithmen. Ein Algorithmus muß ausführbar sein." (Def. aus Balzert 99, S. 469/470)

Der Algorithmus - Grundlegendes ●



Beispiele für Algorithmen aus dem täglichen Leben... –

IKEA-Anleitung



Kochrezept



Spielregeln, z.B. Monopoly



Bedienungsanleitung

... und aus dem Schulwissen –

Primzahltestverfahren



Ermittlung des ggT



Bestimmung eines Schaltjahres

Der Algorithmus - Grundlegendes ●

Eigenschaften –

Determiniertheit: gleiche Startbedingungen führen zu gleichen Endergebnissen



Determinismus: zu jedem Zeitpunkt ist der nächste Schritt eindeutig definiert



Finitheit: statisch, endlicher Quelltext, dynamisch, begrenzt viel genutzter Speicher



Terminiertheit: Abbruch nach einer endlichen Anzahl von Schritten (keine Endlosschleife)

Der Algorithmus - Grundlegendes ●

Beispiele –

Determiniertheit ● ●



Ja: Algorithmus zur ggT-Berechnung Nein: Fraktalgeneratoren, z.B. Mandelbrotbäume, oder „Game of Life“-Algorithmen

Determinismus: ● ●

Ja: Sortierung nach Bubblesort Nein: Sortierung nach Quicksort mit zufälligem Pivot-Element,

Der Algorithmus - Grundlegendes ●

Beispiele –

Finitheit ●





Statisch: Jeder nicht sich selbst modifizierende Algorithmus Dynamisch: KI-Algorithmen, die sich selbst modifizieren (lernen, Bsp: Creatures)

Terminiertheit: ●



Ja: Alle Algorithmen, die nach endlicher Zeit abbrechen Nein: Endlosschleifen, gewollt bei z.B. Betriebssystemen, Spielen, allgemein bei Benutzer-interaktiven Algorithmen

Der Algorithmus - Grundlegendes ●

Analyse –

Eine der Hauptaufgaben der Informatik



Meist theoretisch ohne echte Programmiersprache



Abschätzung von Laufzeit und Platzverbrauch (Komplexitätstheorie)



Analyse der Terminierung (Berechenbarkeitstheorie)

Datenstrukturen Grundlegendes

Datenstrukturen - Grundlegendes ●







Mathematisches Objekt zur Speicherung von Daten Daten werden auf eine bestimmte Art und Weise verknüpft Dadurch bestimmte Zugriffsarten (z.B. durch Algorithmen) ermöglicht Datenstruktur definiert sich also aus beinhalteten Daten und Zugriffs- / Modifikationsoperationen

Datenstrukturen - Grundlegendes ●



Datenstrukturen bauen auf elementaren Datentypen auf Elementare Datentypen: –

Ganzzahlen (Z, N)



Festkommazahlen (Dezimalzahlen)



Gleitkommazahlen



Zeichen



Wahrheitswerte

Datenstrukturen - Grundlegendes ●



Elementare Datentypen in JAVA –

Ganzzahlen: INTEGER, LONG



Festkommazahlen: DECIMAL



Gleitkommazahlen: FLOAT



Zeichen: CHAR



Wahrheitswerte: BOOLEAN

Größe und Genauigkeit der el. Datentypen ist abhängig von System (z.B. 32 / 64 Bit) und Implementation in der jeweiligen Programmiersprache

Datenstrukturen - Grundlegendes ●

El. Datentypen können zu zusammengesetzten Datentypen kombiniert werden –

Feld (Array), je nach Sprache meist vom gleichen Datentyp



Zeichenkette (String), Aneinanderreihung von Zeichen, fest oder dynamisch



Verbund (Struct), Kombination verschiedener Datentypen unter einem Namen

Datenstrukturen - Grundlegendes ●

Abstrakter Datentyp (ADT) –

Oberbegriff aller Datenstrukturen



Erweitert die zusammengesetzten Datentypen um Operationen, die nur auf dem ADT arbeiten



Diese Operationen ermgöglichen z.B. seriellen oder wahlfreien Zugriff, Sortierung, Löschen, Einfügen ... abhängig von den im ADT verwendeten Datentypen



ADT ist auch die Grundlage für OjektOrientierung

Datenstrukturen - Grundlegendes ●

Beispiele für ADTs –

Liste ●



● ●

Einfach verkettet, Eintrag hält Verweis auf einen Nachfolger Doppelt verkettet, Eintrag hält Verweise auf Nachfolger und Vorgänger Erstes Element heisst Listenkopf Operationen – – – –

Suchen Einfügen Sortieren Löschen

Datenstrukturen - Grundlegendes ●

Beispiele für ADTs –

Bäume ● ●

Spezielle Graphen (mehr dazu später) Viele Spezialisierungen – – –

● ●

Binärbäume Balancierte Bäume AVL-Bäume

Haben eine „Wurzel“, der erste Eintrag im Baum Spezielle Version des BSP-Trees ermöglichte das Spiel „Doom“

Datenstrukturen – Die Realität unter der Abstraktion

Datenstrukturen – Die Realität unter der Abstraktion ●







Darstellung von Strukturen und Analyse der darauf laufenden Algorithmen läuft meist therotisch Datenstrukturen werden dabei abstrahiert dargestellt Alle modernen Programmiersprachen übernehmen die Übersetzung in die „Realität“ Dadurch werden Fehler verringert

Datenstrukturen – Die Realität unter der Abstraktion ●

Beispiel: Ein 10-Stelliger 16 Bit Speicher Stelle

Zahl

0

0100 0100 1001 0001

1

1001 1001 0110 1001

2

0010 1001 0010 1000

3

0000 0000 0000 0000

4

1111 1111 1111 1111

5

0101 1010 0101 1010

6

0000 1111 0000 1111

7

1111 0000 1111 0000

8

1010 1010 1010 1010

9

0001 0001 0001 0001

Datenstrukturen – Die Realität unter der Abstraktion ● ●





Die „Stelle“ = der Index des Speichers Wird natürlich auch als binär codierte Zahl dargestellt und kann somit selbst als Zahl im Speicher stehen Das System muss wissen, wie eine Zahl an einer Speicherstelle zu interpretieren ist Eine Zahl im Speicher, die als Adresse einer anderen Speicherstelle interpretiert wird, heisst Zeiger

Datenstrukturen – Die Realität unter der Abstraktion ●



Prinzipell gibt es für jede Zahl im Speicher einen Zeiger, nämlich eben die Speicherstelle Kombiniert man die Zeiger mit anderen Datentypen, so ergeben sich Datenstrukturen Datentyp Integer

struct list_node { int data; struct list_node *next; };

Zeiger auf anderen list_node

Stelle

Zahl

0

0100 0100 1001 0001

Integer data

1

0000 0000 0000 0010

Zeiger * next

2

0010 1001 0010 1000

Integer data

3

0000 0000 0000 0100

Zeiger * next

4

1111 1111 1111 1111

Integer data

5

0000 0000 0000 0110

Zeiger * next

6

0000 1111 0000 1111

Integer data

7

0000 0000 0000 1000

Zeiger * next

8

1010 1010 1010 1010

Integer data

9

0001 0001 0001 0001

Zeiger * next