22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Der vollständige Korrektheitsbeweis ergibt sich direkt aus einer Umsetzung des obigen Argumentes und<br />

ist daher nicht mehr sehr schwer. Darüber hinaus ist <strong>der</strong> Algorithmus auch viel effizienter. Die Anzahl<br />

<strong>der</strong> Rechenschritte für Folgen <strong>der</strong> Länge n liegt nun in <strong>der</strong> Größenordnung von n – also nur etwa 300<br />

für Folgen <strong>der</strong> Länge 100.<br />

Das obige Beispiel zeigt, daß man durch das Prinzip, den Beweis als Leitlinie zur Implementierung zu verwenden,<br />

zu erheblich effizienteren und auch leichter zu verifizierenden Lösungen kommt. 46 Am folgenden Beispiel<br />

wollen wir nun demonstrieren, daß manche Probleme überhaupt nicht gelöst werden können, wenn man sich<br />

nicht zuvor eine Beweisidee zurechtlegt.<br />

Beispiel 4.5.3 (Das Kaffebohnen Problem)<br />

In einer Kaffedose befinden sich helle und dunkle Kaffebohnen. Aus dieser greife man sich zufällig zwei<br />

Bohnen heraus. Sind sie gleich, so werden beide herausgenommen und eine dunkle wie<strong>der</strong> hineingetan<br />

(es sind genügend dunkle Bohnen vorhanden). Sind sie unterschiedlich, so wird die helle zurückgelegt<br />

und die dunkle herausgenommen. Das Ganze wird wie<strong>der</strong>holt, bis nur noch eine Bohne in <strong>der</strong> Dose ist.<br />

Die Frage lautet nun, wie die Anzahl <strong>der</strong> hellen und dunklen Bohnen damit zusammenhängt, welche<br />

Farbe die letze Bohne hat. Was bleibt z.B. übrig, wenn ursprünglich 43 helle und 32 dunkle Bohnen in<br />

<strong>der</strong> Dose waren?<br />

Nach einigen Versuchen stellt sich heraus, daß Experimente bei <strong>der</strong> Beantwortung dieser Frage überhaupt<br />

nicht weiterhelfen. Es gibt Leute, die Stunden damit vergeudet haben, die verschiedensten Kombinationen<br />

durchzuprobieren, ohne zu einem tragfähigen Ergebnis zu kommen. 47<br />

Das einzige, was hier weiter hilft, ist die Überlegung, daß es irgendeine Eigenschaft geben muß, die durch<br />

das Herausnehmen <strong>der</strong> Bohnen nicht verän<strong>der</strong>t wird, also invariant bleibt. Diese Eigenschaft, zusammen<br />

mit <strong>der</strong> Tatsache, daß nur eine Bohne übrigbleibt, kann dann die Antwort geben.<br />

Nun, in jedem Zug verschwinden entwe<strong>der</strong> zwei helle Bohnen aus <strong>der</strong> Dose o<strong>der</strong> keine und entwe<strong>der</strong><br />

verschwindet eine dunkle Bohne o<strong>der</strong> es kommt eine hinzu. Nach einigem Nachdenken fällt auf, daß<br />

Zwei und Null jeweils gerade Zahlen sind. Das bedeutet, daß bei einer geraden Anzahl von hellen Bohnen<br />

nach einem Zug wie<strong>der</strong> eine geraden Anzahl von hellen Bohnen in <strong>der</strong> Dose liegt und ähnliches für eine<br />

ungerade Anzahl gilt. Die Eigenschaft, ob eine gerade o<strong>der</strong> ungerade Anzahl heller Bohnen vorhanden<br />

ist, bleibt also bei jedem Zug unverän<strong>der</strong>lich.<br />

Als Konsequenz wissen wir nun, daß zum Schluß genau dann eine dunkle Bohne übrigbleibt, wenn zu<br />

Beginn eine gerade Anzahl von hellen Bohnen in <strong>der</strong> Dose war.<br />

Beide Beispiele zeigen, wie wichtig es ist, die Eigenschaften <strong>der</strong>jenigen Objekte zu kennen, mit denen das<br />

Programm zu tun haben soll. Je mehr Zusammenhänge man formulieren kann, um so größer ist die Chance,<br />

ein gutes und effizientes Programm zu schreiben.<br />

Entwurfsprinzip 4.5.4<br />

Mache Dir die Eigenschaften <strong>der</strong> Objekte klar, die von einem Programm manipuliert werden sollen.<br />

Auch wenn wir die Bedeutung von Korrektheitsbeweisen beson<strong>der</strong>s hervorheben, sei dennoch darauf hingewiesen,<br />

daß eine vollständige Formalisierung <strong>der</strong> Beweise in einem Kalkül meist we<strong>der</strong> notwendig noch<br />

erstrebenswert ist, solange keine Werkzeuge zur Unterstützung des Kalküls bereitstehen. Zu viel Formalismus<br />

führt dazu, daß die wesentlichen Ideen in einem Übermaß an unverständlichen Details verlorengehen.<br />

46Man mag hier natürlich einwenden, daß man eventuell auch auf an<strong>der</strong>en Wegen zu einer ähnlich guten Lösung gekommen<br />

wäre. Ich persönlich halte dies aber für sehr unwahrscheinlich.<br />

47Dies sagt auch etwas aus über die Aussagekraft von Tests bei <strong>der</strong> Analyse von Programmen. Man kann Tausende von<br />

Testläufen durchführen ohne dadurch eine sichere Aussage über die Korrektheit des Programms zu gewinnen. Man kann mit<br />

Tests oft nicht einmal den Gründen für die Fehler auf die Spur kommen, die man am äußeren Verhalten bereits entdeckt hat.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!