Datenstrukturen und Algorithmen (Master)

Ein Algorithmus ist eine eindeutige Handlungsvorschrift, um eine Aufgabe zu lösen und kann als Computer-Programm implementiert werden. Damit sind Algorithmen ein zentrales Thema der Informatik. Egal, ob wir eine Suchmaschine im Internet nutzen, eine Mail verschicken, eine Liste von Kundendaten sortieren, einen Routenplaner verwenden, oder ein Schaltungslayout optimieren, in allen Fällen kommen leistungsfähige Algorithmen zum Einsatz.

Die Verwendung effizienter Algorithmen ist eine notwendige Voraussetzung für schnelle und effiziente Computersysteme. Die Wahl eines ”schlechten“ Algorithmus kann selbst durch eine hundertfache Erhöhung der Rechenleistung eines Computers nicht kompensiert werden.

Durch den Einsatz von geeigneten Algorithmen können also erhebliche Kosten eingespart werden.

In der Regel nutzen Algorithmen eine spezielle Anordnung der zu verarbeitenden Daten. Die Daten sind in bestimmten Strukturen organisiert und auf diese Datenstrukturen kann mit speziellen Operationen zugegriffen werden, um z.B. Daten einzufügen oder zu suchen. Diese Operationen realisieren ihrerseits wieder Algorithmen. Die Themen Algorithmen und Datenstrukturen gehören daher eng zusammen. Folglich werden wir auch eine Reihe nützlicher Datenstrukturen kennenlernen.

In der Vorlesung werden Datenstrukturen und Algorithmen für praktisch relevante Aufgabenstellungen vorgestellt. Die Algorithmen werden aber nicht nur aufgelistet, sondern es wird auch betrachtet, wie Algorithmen analysiert und bewertet werden können. Zudem werden wir einen ersten Einblick gewinnen, wie effiziente Algorithmen entworfen werden können.

Themen

1.Einleitung
2.Analyse von Algorithmen
2.1Maschinenmodell
2.2Analyse von Insertion Sort
2.3Größenordnung der Laufzeit
2.4Asymptotisches Wachstum von Funktionen
2.5Best-case, Average-case, Worst-case
2.6Sequentielle und binäre Suche
3.Arithmetik
3.1Natürliche Zahlen, Ganze Zahlen, Rationale Zahlen, Reelle Zahlen
3.2Stellenwertsysteme
3.3Umwandlung zwischen Zahlensystemen
3.4Binäre Darstellung ganzer Zahlen
3.5Gleitpunktdarstellung
4.Elementare Datenstrukturen
4.1Standard-Datenstrukturen
4.2Listen
4.3Bäume
4.4Graphen
5.Mengen
5.1Klassische Mengen
5.2Dictionaries
5.3Hashing
5.4Priority Queues
6.Rekursion
6.1Rekursive Funktionen
6.2Programmierung rekursiver Funktionen
7.Algorithmen für Bäume und Graphen
7.1Lineare Ordnung auf binären Bäumen
7.2Binäre Suchbäume
7.3Balancierte Bäume
7.4Traversieren von Graphen
7.5Bestimmung kürzester Wege in einem Graphen
7.6Minimaler Spannbaum
8.Sortieren
8.1Bubble Sort
8.2Quicksort
8.3Heapsort
8.4Mergesort
9.Schwierige Probleme
9.1Maschinenmodelle
9.2Entscheidungsprobleme
9.3P und NP
9.4NP-Vollständigkeit