se:algorithmendatenstrukturen
**Dies ist eine alte Version des Dokuments!**
Algorithmen und Datenstrukturen
Algorithmen
Game of life
Geburtstagsproblem
MinMax, AlphaBeta
* Syntaxbaum erstellen
* 8-Damen-Problem
* Sortieralgorithmen
* Bubblesort, Insertsort, Mergesort, Quicksort (+ randomisiert), Median-of-three, Heapsort
* Datenstrukturen
Verkettete Listen
Stack
Queue
Dequeue
Binäre Bäume
Sonstiges
Pipes auf der Bash
Sierpinski-Sieb (Huhn)
O-Notation
Klausur
Umwandlung Postfix/Infix
Lineare Rekursion
* Traversierung von Bäumen
Binärbäume
Komplexität von Algorithmen bestimmen, Laufzeitanalyse (quadratisch, kubisch etc.)
Codeoptimierung
Arrays mit Quicksort sortieren (C: qsort)
Heapsort, Countingsort, Radixsort
Backtracking (Was gibt vorgegebenes Programm aus?)
Postfix / Infix
mathematische Ausdrücke werden ublicherweise in der so genannten Infix-Schreibweise geschrieben:
(4 + 5) * (3 - 1) / 9
man kann solche Ausdrücke aber auch in der so genannten umgekehrten polnischen Notation angeben:
4 5 + 3 1 - * 9 /
Vorteile
keine Berücksichtigung von Prioritäten der Operatoren nötig, es werden keine Klammern benötigt
* kann leicht mit Hilfe eines Stacks implementiert werden
* Umwandlung Infix → Postfix (alle Ausdrücke müssen geklammert sein)
Ausdruck von links nach rechts durchgehen
Zahlen direkt ausgeben
Operatoren auf den Stack legen
bei schließender Klammer den obersten Operator ausgeben
Lineare Rekursion
eine Funktion heißt rekursiv, wenn sie sich selbst oder ein von ihr aufgerufenes Programm sie selbst wieder aufruft
jede Rekursion kann durch entsprechende Wiederholungen ausgedrückt werden und umgekehrt
Beispiele für Anwendung von Rekursion
Quadratzahlen: n2 = (n - 1)2 + 2n - 1
größter gemeinsamer Teiler: ggT(n, m) = 0, wenn m = 0, sonst ggT(m, n mod m)
Dreieckszahlen: (k * (k + 1)) / 2
Umwandlung von Dezimal- in Dualzahl: bis zahl = 0: rest = zahl % 2, zahl = zahl / 2; Reste umgekehrt ausgeben
'
wenn eine Funktion sich mehrmals aufruft erhält man eine nicht-lineare Rekursion in Baumstruktur
Fibonacci-Zahlen: F(0) = 1; F(1) = 1; F(n) = F(n - 2) + F(n - 1)
Binomialkoeffizient: n über k = 1, wenn n oder k = 0, sonst (n - 1 über k) + (n - 1 über k - 1)
Pascal'sches Dreieck
se/algorithmendatenstrukturen.1231692688.txt.gz · Zuletzt geändert: 2014-04-05 11:42 (Externe Bearbeitung)