André Vratislavsky

Übungsgruppe vom 26.10.99

Einführung: Wozu Theoretische Informatik?

Berechenbarkeit und Effizienz

Es geht um die Frage, ob ein Problem berechenbar ist, bzw. ob die Lösung effizient, also in vertretbarer Zeit berechenbar ist.
Dabei geht es nicht um Lottozahlen oder Weissagungen, vielmehr werden sich ganz einfach anmutende Fragen als unlösbar bzw. sehr aufwendig herausstellen.

Formalisierung:

Ein Problem kann als Frage aufgefaßt werden.
z.B.: Ist ein gegebener Text ein syntaktisch korrektes Java-Programm?

Formal betrachtet bilden alle korrekten Java-Programme eine Menge. Jedes Element dieser Menge, d.h. jede Zeichenkette, die ein  korrekte Java-Programm darstellt, wird als Wort bezeichnet, die Menge von Zeichenketten selbst als Sprache.
Die Frage lautet also: Ist eine gegebene Zeichenkette Element dieser Menge?
Oder allgemein: Ist ein beliebiges Wort Element einer beliebigen Sprache?

Uns interessieren im folgenden nur Probleme, die auf diese Weise formuliert werden können.

Daraus ergeben sich folgende Themen:

Gibt es unentscheidbare Probleme?

Die Menge der Sprachen über dem Alphabet {0,1}, also eine Teilmenge aller Probleme, ist bereits gleichmächtig zur Menge der reellen Zahlen. Dagegen ist die Menge der Programme eine Teilmenge der endlichen Zeichenketten über einem endlichen Zeichenvorrat, also nur gleichmächtig zur Menge der natürlichen Zahlen. (Da die Zeichenketten endlich sind, lassen sie sich aufzählen.) Es gibt also viel mehr Sprachen/Probleme als Programme. Aus der Mathematik ist bekannt, daß es keine bijektive Abbildung von der Menge der natürlichen Zahlen in die Menge der reellen Zahlen gibt. Da aber jedes Programm nur ein Problem löst, gibt es unlösbare Probleme.

Vollständige Induktion

Beweismethode für Aussagen über den Natürlichen Zahlen.

Prinzip:

O-Notation

Def:
f(n) = O(g(n)) :<=> es gibt c, n0 > 0 : 0 <= f(n) <= c*g(n) für alle n >= n0

Satz:   [lim(n->unendl) (f(n)/g(n))] existiert   =>   f(n)=O(g(n))

Es gilt:
log n < Wurzel(n) < n < nc < cn  für Konstante c,
wobei '<' die Größenordnung angibt ( f(n)=O(g(n)) )