Kurs:Algorithmen und Datenstrukturen/Funktionale Algorithmen



Inhalte

Einleitung Bearbeiten

  1. Begriffserklärungen
  2. Eigenschaften von Algorithmen
  3. Algorithmenentwurf
  4. Größter gemeinsamer Teiler
  5. Berechenbarkeit

Theoretische Grundlagen Bearbeiten

Programmierparadigmen Bearbeiten

  1. Überblick
  2. Paradigmenbegriff
  3. Funktionale Algorithmen
    1. Grundidee
    2. Funktionsdefinition und Signatur
    3. Auswertung von Funktionen
    4. Auswertung von rekursiven Funktionen
    5. Fakultät
    6. Größter gemeinsamer Teiler
    7. Fibonacci-Zahlen
    8. Weiteres Beispiel
  4. Logische Algorithmen
    1. Einführung
    2. Prädikatenlogik&Hornlogik
    3. Prolog
    4. Listen
  5. Imperative Algorithmen
    1. Einführung
    2. Variablen
    3. Zustände
    4. Ausdrücke
    5. Anweisungen
    6. Syntax und Semantik
    7. Fakultätsfunktion
  6. Funktional vs. Imperativ
    1. Fibonacci-Zahlen
    2. Größter gemeinsamer Teiler

Laufzeitanalysen Bearbeiten

  1. Komplexität
  2. Notationen
    1. O-Notation
    2. Omega-Notation
    3. Theta-Notation
    4. Eigenschaften
    5. Komplexitätsklassen
  3. Aufwandsanalyse von iterativen Algorithmen
  4. Aufwandsanalyse von rekursiven Algorithmen
    1. Vollständige Induktion
    2. Mastertheorem
  5. Rekursionsbäume

Entwurfsmuster Bearbeiten

  1. Entwurfsprinzipien
  2. Greedyalgorithmen
    1. Wechselgeldalgorithmus
  3. Divide and Conquer
  4. Backtracking
  5. Dynamische Programmierung

Suchen Bearbeiten

Suchen in sortierten Folgen Bearbeiten

  1. Einleitung
  2. Sequentielle Suche
  3. Binäre Suche
  4. Fibonacci Suche

Suchen in Texten Bearbeiten

  1. Einleitung
  2. Naiver Algorithmus zur Textsuche
  3. Knuth-Morris-Path

Sortieren Bearbeiten

Algorithmen für vergleichsbasiertes Sortieren Bearbeiten

  1. Grundlagen
  2. InsertionSort
  3. SelectionSort
  4. BubbleSort
  5. MergeSort
  6. Zwischenbemerkungen
  7. QuickSort
  8. Untere Schranke

Weitere Sortierprobleme Bearbeiten

  1. Rückblick und Ausblick
  2. Nicht-Vergleichsbasiertes-Sortieren: Bucket Sort
  3. Verteiltes Sortieren: Batcher Sort

Dynamische Datenstrukturen Bearbeiten

Binäre Suchbäume Bearbeiten

  1. Einleitung
  2. Einschub Bäume und Traversierung
  3. Binäre Suchbäume
    1. Suchen
    2. Einfügen
    3. Löschen
    4. Implementierung
    5. Weitere Aspekte
  4. AVL-Bäume
  5. 2-3-4-Bäume und Rot-Schwarz-Bäume
  6. Heaps
  7. Hashtabellen

AVL-Bäume Bearbeiten

  1. AVL-Bäume

2-3-4-Bäume und Rot-Schwarz-Bäume Bearbeiten

  1. 2-3-4-Bäume
  2. Rot-Schwarz-Bäume

Heaps Bearbeiten

  1. Heap Sort
    1. Vorgehensweise
    2. Analyse

Hashtabellen Bearbeiten

  1. Hashtabellen
    1. Kollisionsstrategie
    2. Aufwand
    3. Dynamische Hashverfahren
    4. Hashen in Java

Graphen Bearbeiten

Einführung Bearbeiten

  1. Typen von Graphen
  2. Definitionen zu Graphen
  3. Repräsentation von Graphen
  4. Datenstrukturen für Graphen

Breitendurchlauf Bearbeiten

  1. Breitensuche

Tiefendurchlauf Bearbeiten

  1. Tiefensuche

Topologisches Sortieren Bearbeiten

  1. Topologisches Sortieren

Berechnung kürzester Wege Bearbeiten

  1. Einleitung
  2. Der Algorithmus von Dijkstra
  3. Der Algorithmus von Bellmann-Ford
  4. Der Algorithmus von Floyd-Warshall
  5. Das Traveling Salesman Problem

Berechnung maximaler Flüsse Bearbeiten

  1. Berechnung Maximaler Flüsse
  2. Der Algorithmus von Ford-Fulkerson

Spannbäume Bearbeiten

  1. Spannbäume
    1. Algorithmus von Prim

Optimierung Bearbeiten

  1. Grundlagen der Optimierung
  2. Kombinatorische Optimierung
  3. Lineare Optimierung
  4. Das Simplex Verfahren