Der Weg zum Lösungsweg
Wie entwickelt man einen Algorithmus – oder allgemeiner: wie findet man Lösungswege?
MATERIALIEN
Ein Algorithmus beschreibt das genaue Vorgehen zur Lösung eines Problems
Algorithmus
Ein Algorithmus ist eine eindeutige Handlungsanweisung für die Lösung von Problemen. Algorithmen bestehen aus endlich vielen, wohldefinierten Einzelschritten. Sie können in menschlicher Sprache formuliert oder aber zur Ausführung in ein Computerprogramm implementiert werden. Für die Problemlösung wird eine bestimmte Eingabe Schritt für Schritt in eine bestimmte Ausgabe überführt.
Das wirft eine Frage auf: Wie kommt man von der (ggf. komplexen) Problemstellung zur algorithmischen Beschreibung einer (schlauen) Lösung?
Die Antwort: mit Computational Thinking.
Computational Thinking
«Computisches Denken» meint die Strategie, Lösungswege in eine Schritt-für-Schritt-Anleitung zu übersetzen.
Computational Thinking
Computational Thinking (auf Deutsch etwa «Informatisches Denken») beschreibt ein sehr allgemeines Set von Denkfiguren (= Arten des Denkens), die bei der Problemlösung zum Einsatz kommen. Computational Thinking bezieht sich nicht notwendigerweise auf Algorithmen und auch nicht nur auf die Informatik. Vielmehr sollen die beschriebenen Denkweisen als Hilfestellung zur strukturierten Lösung aller möglichen Arten von Problemen dienen.
Die wichtigsten Denkfiguren des Computational Thinking sind:
- Decomposition: Ein grosses Problem wird in mehrere kleine zerlegt. Diese kleineren Teilprobleme sind einfacher zu handhaben bzw. zu bedenken, oft kann man sie einzeln nacheinander lösen. Dazu gehört ebenfalls die Strategie, zunächst eine einfachere Version des Problems zu lösen und den initialen Lösungsansatz dann auf immer allgemeinere Formen des Problems zu erweitern.
- Pattern Recognition: Wiederkehrende Muster und ähnliche Teilprobleme, also gleichartige Strukturen werden identifiziert. So kann man sich bei der Lösungsfindung auf wenige Aspekte konzentrieren und durch die wiederholte Anwendung derselben Lösungsschritte auch umfangreiche Aufgaben meistern.
- Abstraction: Das Problem wird aus einem gewissen Abstand betrachtet und über Details hinweggeschaut. Dieser Schritt ist beispielsweise nötig, um das Problem in seiner einfachst möglichen Form zu formulieren, in der nur noch die wirklich relevanten Informationen berücksichtigt werden.
Natürlich hilft die abstraktere Sichtweise auch bei Decomposition und Pattern Recognition, denn oftmals zeigt sich, dass zu Beginn verschieden erscheinende (Teil-)Probleme sich auf einen gemeinsamen Kern zurückführen lassen und mit derselben (wiederholten) Strategie zu lösen sind.
Bei komplexen Problemen ist es oft nötig, kontinuierlich mit verschiedenen Ebenen der Abstraktion umzugehen, beispielsweise wenn man eigentlich gerade eine Lösung für ein Teilproblem sucht, dabei aber den Zusammenhang mit dem Gesamtproblem auf der einen und der technischen Umsetzung auf der anderen Seite nicht ganz ausser Acht lassen darf. - Algorithm Design: Die Lösung oder den Lösungsansatz wird in klar formulierte, einzelne Schritte aufgeteilt und eine Reihenfolge für diese Schritte festgelegt. Dazu gehört ebenfalls, dass man die Rahmenbedingungen für einen Algorithmus immer wieder überprüft (z.B. ob die Schritte eindeutig formuliert sind, ob der gefundene Lösungsansatz immer korrekte Ergebnisse liefert oder ob alle Varianten des Problems berücksichtigt sind).
Ein Beispiel für Computational Thinking
Wie findet man (im Dunkeln) aus jedem beliebigen Irrgarten heraus? Diese Frage lässt sich eindeutig beantworten – mit einem Algorithmus. Das oben beschriebene Computational Thinking ist sehr nützlich auf dem Weg zu einem Algorithmus. Die Entwicklung des Lösungsansatzes bietet also verschiedene Gelegenheiten, die zugehörigen Denkfiguren zu verstehen und üben:
Aufgabe
Aufgabe
Zur Umsetzung der allgemeinsten Form des Irrgarten-Algorithmus folgen Sie diesem Vorgehen:
Sie finden auch eine Musterlösung. Bitte schauen Sie erst nach, wenn Sie selbst eine Lösung gefunden haben – oder wenn Sie wirklich gar nicht weiterkommen.