i

Exkurs – Algorithmisches Problemlösen

Orientierung

Es ist manchmal gar nicht so einfach, einen Algorithmus zur Lösung eines Problems zu entwickeln – insbesondere dann, wenn das Problem komplizierter ist. Am Beispiel Kleeblatt suchen sollen die wesentlichen Schritte im Folgenden noch einmal kurz zusammengestellt werden.

Das Problem: Kleeblatt suchen

Hier noch einmal eine Beschreibung des zu lösenden Problems.

Kara ist auf der Suche nach einem Kleeblatt. Kara soll hierzu geradeaus weiterlaufen, bis sie/er ein Kleeblatt gefunden hat. Aber, es befinden sich manchmal Baumstümpfe im Weg. Kara muss diese Hindernisse dann umlaufen.

Aufgabe 1: Das Problem beschreiben

Probleme lassen sich (nicht nur) in PythonKara sehr gut durch Abbildungen einer Vorher-Nachher-Beschreibung der Kara-Welt darstellen.

(a) Erkläre, warum die folgende Abbildung nicht gut geeignet ist, um das Problem zu beschreiben.

Kara sucht ein Kleeblatt – Ein Beispiel

(b) Ist dieses Beispiel besser geeignet, um das Problem zu beschreiben? Finde Argumente für und gegen dieses Beispiel.

Kara sucht ein Kleeblatt – Weiteres Beispiel

(c) Erzeuge selbst eine Kara-Welt (vorher und nachher), die gut geeignet ist, um das Problem darzustellen.

Ideen suchen

Algorithmen bzw. Programme kann man oft nicht gleich hinschreiben. Zunächst muss man nach geeigneten Ideen suchen.

Aufgabe 2: Die Ideensuche

Die folgenden Überlegungen und Handlungen können alle bei der Ideensuche auftreten. Bringe sie in die richtige Reihenfolge.

T: Ich überlege mir, welche grobe Struktur vorliegt: Welche Teilaufgaben (z.B. Baumreihe umlaufen) sind zu erledigen? (Diese Teilaufgaben muss ich noch nicht im Detail ausführen.) Gibt es eine wichtige äußere Schleife? Was wäre die entsprechende Schleifenbedingung?

U: Ich suche Gemeinsamkeiten in meinen eigenen Lösungsabläufen. Passiert etwas immer zu Beginn oder immer am Ende?

A: Ich spiele selbst Kara und löse das Problem für verschiedene Ausgangszustände.

O: Ich teste mein überlegtes grobes Vorgehen an verschiedenen möglichst unterschiedlichen Ausgangszuständen. Kann man es überall anwenden oder gibt es Sonderfälle, die noch nicht berücksichtigt sind? In diesem Fall müsste ich nachbessern.

Algorithmus entwickeln und formulieren

Erste Ideen sind nicht präzise genug, dass sie von einer Maschine bearbeitet werden können; sie stellen also keinen Algorithmus dar. Wir müssen das Verfahren deshalb noch präziser formulieren.

Beispiel: Bei der Ideensuche könnte man notiert haben: „WENN man vor einem Baum steht, dann muss man den Baum / die Baumreihe umlaufen“. Nun wäre es an der Zeit, klarzumachen, wie man eine Baumreihe bzw. einen Baum umläuft.

Bei dieser Präzisierung bieten sich für kleinere Probleme Flussdiagramme an. Bei größeren Problemen haben sich Struktogramme bewährt.

Ein mögliches Ergebnis der Präzisierung ist dieses Struktogramm.

Struktogramm Kleeblatt suchen

Aufgabe 3: Warum nicht gleich programmieren?

Begründe, warum man nach der Ideensuche nicht direkt mit dem Programmieren beginnen sollte, sondern stattdessen erst einmal den Algorithmus in einer anderen Form (z.B. als Struktogramm) entwickelt.

Algorithmus implementieren

Der letzte Schritt zur Entwicklung einer lauffähigen Problemlösung besteht darin, den Algorithmus in eine vom Ausführsystem vorgegebene Sprache zu übersetzen und zu testen. In unserem Kara-System ist das die Programmiersprache Python.

while not kara.onLeaf():
    if kara.treeFront():
        kara.turnLeft()
        kara.move()
        kara.turnRight()
        kara.move()
        while kara.treeRight():
            kara.move()
        kara.turnRight()
        kara.move()
        kara.turnLeft()
    else:
        kara.move()
kara.removeLeaf()

Hierbei muss man dann natürlich die Besonderheiten der vorgegebenen Sprache beachten.

Aufgabe 4: Was heißt eigentlich „Programmieren“?

Nimm Stellung zu folgendem Zitat: „Some of the best programming is done on paper, really. Putting it into the computer is just a minor detail.“ (Max Kanat-Alexander: Code Simplicity: The Fundamentals of Software, Sebastopol: O'Reilly (2012))

Das Wichtigste notieren

Aufgabe 5: Ein Wissensspeicher für das Algorithmische Problemlösen

Die vier Schritte, mit denen wir dieses Problem gelöst haben, sind so wichtig, dass wir sie notieren sollten. Im Wissensspeicher sind die vier Schritte vorgegeben. Beschreibe jeden der Schritte. Gib an, welche Hilfsmittel (Sprache, Diagramme, ...) genutzt werden. Lass ggf. etwas Platz, um später noch Punkte zu ergänzen. Den unteren Bereich zu den Fehlertypen kannst du erst einmal freilassen.

Suche

v
6.1.4.5
www.inf-schule.de/imperative-programmierung/kara/algorithmen/exkurs_problemloesen
www.inf-schule.de/6.1.4.5
www.inf-schule.de/@/page/H6PTvU3CcdzSPbJw

Rückmeldung geben