Von Labyrinthen zu Algorithmen Gerald Futschek Algorithmen prolog der Informatik Wie kommt man aus einem Labyrinth heraus? • Labyrinth (griechisch: Haus der Doppelaxt, wahrscheinlich Knossos auf Kreta) Labrys Grundriss des Palastes von Knossos Algorithmen prolog der Informatik 1 Fragestellungen zu Labyrinthen • Finde einen Weg durch das Labyrinth • Finde einen Weg hinaus • Finde einen Weg zu einem bestimmten Punkt im Labyrinth • Gibt es vielleicht mehrere Wege? • Welcher Weg ist der kürzeste? • Wie findet man solche Wege? Algorithmen prolog der Informatik Präzisierung der Aufgabenstellung • Gesucht ist ein Weg von Position A nach B • Form, Größe und Struktur des Labyrinths ist zunächst nicht bekannt Algorithmen prolog der Informatik 2 Sichtweise in einem Labyrinth Algorithmen prolog der Informatik Algorithmen prolog der Informatik 3 Algorithmen prolog der Informatik Suche nach einem Weg • An jeder Kreuzung: Welchen Gang soll man gehen? – einen zufälligen? – einen bestimmten Gang? – alle Gänge der Reihe nach? (wie geht das genau?) Strategie gesucht! Algorithmen prolog der Informatik 4 Eine Idee für eine Strategie • „Man geht immer der linken Wand entlang!“ • Diese Strategie funktioniert jedenfalls sicher von einem Eingang zu einem Ausgang (Spiegelkabinett) Algorithmen prolog der Informatik Eine Lösungsstrategie • Immer die linke Wand entlang gehen Gesucht: Nicht die Lösung für ein bestimmtes Labyrinth, sondern ein Verfahren, wie man zur Lösung bei beliebigen Labyrinthen kommt! (ein Algorithmus löst ein allgemeines Problem) Algorithmen prolog der Informatik 5 Abstraktion • Labyrinth besteht aus – Kreuzungen und – Gängen zwischen Kreuzungen • Länge und Form der Gänge nicht wichtig goal start Modellierung als Graph: Knoten und Kanten Kreuzungen werden zu Knoten Gänge werden zu Kanten Algorithmen prolog der Informatik Labyrinth - Graph goal start Was entspricht der linken Wand in einem Graphen? Algorithmen prolog der Informatik 6 Der Graph und der 1.Gang von links • In jedem Knoten müssen wir den 1. Gang von links kennen. • Welche Kante ist der 1. Gang von links? goal start Der 1. Gang von links hängt von dem Gang ab, der zur Kreuzung führt! Algorithmen prolog der Informatik Modellierung der Reihenfolge der Gänge • Ein Graph beschreibt nur Knoten und welche Knoten durch Kanten verbunden sind. • In einem Graph gibt es keine Reihenfolge der Kanten Für jeden Knoten müssen wir eine Reihenfolge der Kanten zusätzlich modellieren. Da alle Kanten „gleichberechtigt“ sind, definieren wir gleich eine zyklische Ordnung: Zu jeder Kante e eines Knoten gibt es eine Nachfolgerkante succ(e) Algorithmen succ(e) ist der 1.Gang von links! prolog der Informatik 7 Modellierung als Embedded Graph • Ein Embedded Graph (in die Ebene eingebettet) hat die Kanten jedes Knoten zyklisch geordnet • dh. man kann, wenn man über eine Kante e zu einem Knoten kommt, mit succ(e) den 1. Gang von links bestimmen • Mit der zyklischen Ordnung hat man auch eine Reihenfolge, um alle Gänge einer Kreuzung systematisch zu durchlaufen! Algorithmen prolog der Informatik Grundoperationen für Labyrinthe Die folgenden Grundoperationen dürfen in einem Labyrinth-Algorithmus verwendet werden: Man kommt stets von einem Gang an eine Kreuzung: • Abfrage: Anzahl weiterer Gänge bei dieser Kreuzung? (Sackgasse bei null weiteren Gängen) • Aktion: Man wählt den i-ten Gang von links und geht in diesem Gang bis zur nächsten Kreuzung • Aktion: Man geht den Gang, den man soeben gekommen ist, bis zur letzten Kreuzung zurück • Abfrage: Ziel erreicht? Ja/Nein Kann man mit diesen Grundoperationen einen Weg von A nach B im Labyrinth finden? Wie? Algorithmen prolog der Informatik 8 Linke Wand entlang • Wie formuliert man den Algorithmus mit den Grundoperationen? • Es gibt ja in der Abstraktion (Graph) keine Wände, sondern nur mehr Kanten! Algorithmus mit den 4 Grundoperationen: solange Ziel nicht erreicht falls Sackgasse drehe dich um und gehe Gang zurück sonst gehe 1. Gang von links Algorithmen prolog der Informatik Flussdiagramm ja Ziel erreicht? nein Sackgasse? ja Welche Anfangsbedingungen müssen erfüllt sein, damit dieser Algorithmus terminiert? nein drehe dich um und gehe Gang zurück gehe 1. Gang von links Algorithmen prolog der Informatik 9 Precondition eines Algorithmus • Precondition (Vorbedingung, Anfangsbedingung) muss vor dem Algorithmus erfüllt sein, damit er terminiert und die gewünschten Ergebnisse liefert Preconditions für Linke Wand Algorithmus: • Ziel muss erreichbar sein • Am Weg zum Ziel ist kein Zyklus Algorithmen Precondition Algorithmus solange Ziel nicht erreicht falls Sackgasse drehe dich um und gehe Gang zurück sonst gehe 1. Gang von links prolog der Informatik Postcondition eines Algorithmus • Postcondition (Nachbedingung, Endbedingung) beschreibt den gewünschten Endzustand des Algorithmus Postcondition des Linke Wand Algorithmus: Ziel ist erreicht Algorithmen Algorithmus Postcondition solange Ziel nicht erreicht falls Sackgasse drehe dich um und gehe Gang zurück sonst gehe 1. Gang von links prolog der Informatik 10 Bedeutung der Precondition • Precondition ist erfüllt: Algorithmus terminiert sicher und nachher ist die Postcondition erfüllt • Precondition ist nicht erfüllt: Precondition Algorithmus Postcondition Es ist nicht garantiert, dass der Algorithmus terminiert oder nachher die Postcondition erfüllt ist. In diesem Fall soll der Algorithmus gar nicht ausgeführt werden! Problem der zyklischen Pfade • Die Strategie „Linke Wand entlang“ funktioniert leider nicht bei allen Labyrinthen, wenn man von A nach B will! • Möglicherweise gibt es Zyklen, sodass es auch unendlich lange Wege gibt (das Verfahren terminiert nicht!) • Gibt es trotzdem Strategien, zum Ziel zu kommen? Algorithmen prolog der Informatik 11 Ariadne, die erste Informatikerin • Theseus ist wild entschlossen, Minotaurus in seinem Labyrinth umzubringen • Ariadne hilft ihm dabei mit einer genialen Idee, den Minotaurus zu finden und das Labyrinth auf schnellem Weg zu verlassen Algorithmen prolog der Informatik Der Ariadne-Faden • Theseus durchsucht systematisch das gesamte Labyrinth: Er spult dabei einen Faden ab, probiert an Kreuzungen den Gang ganz links zuerst, wenn nicht erfolgreich, dann den nächsten, usw. • Bei Sackgassen, erfolglosen Kreuzungen und an Kreuzungen, bei denen der Ariadnefaden quert (Zyklus!) muss er umkehren (back tracking) und den Faden zurückverfolgen und aufwickeln, um dann den nächsten Gang bei einer bereits besuchten Kreuzung einzuschlagen. • Um schließlich zum Eingang zurückzukehren, muss er zuletzt nur den Faden zurückverfolgen Algorithmen prolog der Informatik 12