Korrektheit und Terminierung von Algorithmen
Correctness and Termination of Algorithms
Korrektheit heißt, für JEDE zulässige Eingabe das spezifizierte Ergebnis zu liefern — Tests können Fehler zeigen, aber nie Fehlerfreiheit belegen; „bei fünf Tests richtig = korrekt" ist ein Fehlschluss. Terminierung heißt, für jede Eingabe nach endlich vielen Schritten zu stoppen, begründet über eine Größe, die in jedem Durchlauf schrumpft und eine untere Grenze nicht unterschreiten kann. Beide sind Eigenschaften des Algorithmus jenseits seines Codes und getrennt von der Effizienz; auf ihnen ruht später das Halteproblem.
Voraussetzungen (1)
Ermöglicht (1)
Wann heißt ein Algorithmus korrekt?
Ein Programm, das bei fünf Testfällen das richtige Ergebnis liefert, ist damit als korrekt nachgewiesen.
Was bedeutet es, dass ein Algorithmus terminiert?
Ein gängiges Terminierungsargument: In jedem Schleifendurchlauf wird eine Größe echt kleiner und kann eine feste Grenze nicht unterschreiten — also endet die Schleife nach ___ vielen Schritten.
Ein Sortierverfahren ist blitzschnell, sortiert aber gelegentlich falsch. Ein zweites ist langsam, sortiert aber immer richtig. Welche Aussage passt?
Ein Algorithmus kann terminieren und trotzdem ein falsches Ergebnis liefern.
Tests können die Anwesenheit von Fehlern zeigen, aber niemals ihre ___.
Ob eine Schleife terminiert, kann man immer schon an ihrer Bedingung ablesen, ohne den Schleifenkörper anzusehen.
Spezifikation: „Gib den Durchschnitt der Liste aus.“ Ein Programm läuft für [2, 4, 9] ohne Fehlermeldung durch und gibt 4 aus. Was folgt?
Schleife A: SOLANGE n > 0: n = n − 1. Schleife B: SOLANGE n > 0: m = m − 1. Welche terminiert für jede Startzahl n > 0 sicher?
Die Schleife SOLANGE n ≠ 1: wenn n gerade, n = n / 2, sonst n = 3n + 1 terminiert nachweislich für jede Startzahl — das ist mathematisch bewiesen.
Ein Algorithmus soll das Maximum einer Liste liefern. Bei der leeren Liste stürzt er ab. Die Spezifikation sagt: „Eingabe: eine nichtleere Liste." Ist der Algorithmus korrekt?
Welche Eingabe ist der beste „Härtetest" für einen Algorithmus, der die kleinste Zahl einer Liste sucht?
Die Schleife SOLANGE x ≠ 10: x = x + 3 wird mit x = 4 gestartet. Was passiert?