Korrektheit und Terminierung von Algorithmen
Wann heiĂt ein Algorithmus korrekt?
ErklĂ€rung: Korrektheit ist eine Aussage ĂŒber ALLE Eingaben, gemessen an der Spezifikation â nicht ĂŒber die getesteten FĂ€lle und nicht ĂŒber das bloĂe Durchlaufen.
Ein Programm, das bei fĂŒnf TestfĂ€llen das richtige Ergebnis liefert, ist damit als korrekt nachgewiesen.
ErklĂ€rung: Falsch â Tests können die Anwesenheit von Fehlern zeigen, niemals ihre Abwesenheit. Schon die sechste Eingabe kann den Fehler treffen.
Was bedeutet es, dass ein Algorithmus terminiert?
ErklĂ€rung: Terminierung heiĂt nicht âschnell", sondern âĂŒberhaupt irgendwann fertig" â fĂŒr jede Eingabe, nicht nur fĂŒr manche.
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?
ErklĂ€rung: Entscheidend ist, dass sich die GröĂe aus der BEDINGUNG in jedem Durchlauf der Grenze nĂ€hert. In B bleibt n unverĂ€ndert â die Bedingung bleibt fĂŒr immer wahr.
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.
ErklĂ€rung: Eine GröĂe, die pro Durchlauf schrumpft und nach unten beschrĂ€nkt ist, kann nur endlich oft schrumpfen â das ist das Standardargument fĂŒr Terminierung.
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.
ErklĂ€rung: Falsch â das ist die berĂŒhmte Collatz-Vermutung. FĂŒr alle je getesteten Zahlen stoppt die Schleife, aber ein Beweis fĂŒr ALLE Zahlen fehlt bis heute. Terminierung kann eine echt schwere Frage sein.
Ein Sortierverfahren ist blitzschnell, sortiert aber gelegentlich falsch. Ein zweites ist langsam, sortiert aber immer richtig. Welche Aussage passt?
ErklÀrung: Korrektheit und Effizienz sind getrennte Eigenschaften. Erst wenn ein Verfahren korrekt ist, lohnt der Vergleich der Laufzeiten.
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?
ErklĂ€rung: Korrekt heiĂt âerfĂŒllt die Spezifikation". Was fĂŒr unzulĂ€ssige Eingaben passiert, regelt die Spezifikation â deshalb ist prĂ€zises Festlegen der Eingaben Teil der Arbeit.
Ein Algorithmus kann terminieren und trotzdem ein falsches Ergebnis liefern.
ErklĂ€rung: Richtig â Terminierung und Korrektheit sind unabhĂ€ngig. Ein Verfahren kann sauber stoppen und dennoch das Falsche berechnet haben.
Tests können die Anwesenheit von Fehlern zeigen, aber niemals ihre ___.
ErklĂ€rung: Der klassische Satz von Dijkstra. FĂŒr Fehlerfreiheit brĂ€uchte man ein Argument ĂŒber alle Eingaben â etwa eine BegrĂŒndung entlang der FĂ€lle des Algorithmus.
Welche Eingabe ist der beste âHĂ€rtetest" fĂŒr einen Algorithmus, der die kleinste Zahl einer Liste sucht?
ErklĂ€rung: Fehler verstecken sich an den RĂ€ndern der Spezifikation â dort, wo Schleifen null- oder einmal laufen oder Vergleiche gleichauf enden. ZufĂ€llige âmittlere" FĂ€lle decken das selten auf.
Die Schleife SOLANGE x â 10: x = x + 3 wird mit x = 4 gestartet. Was passiert?
ErklĂ€rung: Hier trifft x die 10 exakt. Vorsicht aber: Mit x = 5 gestartet (5, 8, 11, 14, âŠ) wĂŒrde dieselbe Schleife die 10 ĂŒberspringen und nie enden â Ungleichheits-Bedingungen sind fragil.
Ob eine Schleife terminiert, kann man immer schon an ihrer Bedingung ablesen, ohne den Schleifenkörper anzusehen.
ErklĂ€rung: Falsch â es kommt darauf an, ob der KĂRPER die GröĂen der Bedingung Richtung Abbruch bewegt. Bedingung und Körper mĂŒssen zusammen betrachtet werden.
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?
ErklĂ€rung: Der Durchschnitt von 2, 4 und 9 ist 15 : 3 = 5, nicht 4. Ein Programm kann fehlerfrei durchlaufen und trotzdem das Falsche berechnen: Der MaĂstab fĂŒr Korrektheit ist die Spezifikation, nicht die Abwesenheit von AbstĂŒrzen. Ob es auch bei anderen Eingaben falsch rechnet, zeigt dieser eine Test nicht â er widerlegt nur die Korrektheit.