Visualisierung von Graphenalgorithmen Philipp Matthias Hahn Technische Universität Darmstadt FB Informatik, FG Systemprogrammierung pmhahn@informatik.tu-darmstadt.de 15. August 2002 Technische Universität Darmstadt
Warum Visualisierung? Der Veranstalter Generieren von Beispielen Validieren von Implementierungen Der Zuhörer Verstehen der Beispiele Experimentieren Technische Universität Darmstadt 1
Software Visualisierung Algorithmen-Visualisierung statische Algorithmen- Visualisierung dynamische Algorithmen- Visualisierung Programm-Visualisierung statische Code- Visualisierung dynamische Code- Visualisierung statische Daten- Visualisierung dynamische Daten- Visualisierung Technische Universität Darmstadt 2
Algorithmus, Programme Algorithmen sind exakt formulierte Rechenvorschriften, die auf Computern als ausführbare Programme implementiert und auf diese Art für die Lösung von Aufgaben angewandt werden können. Ein Algorithmus besteht somit aus einer wohldefinierten endlichen Folge von elementaren Rechenoperationen und Entscheidungen, um aus einer bestimmten Menge von Eingabegrößen [... ] das gewünschte Resultat [... ] zu erzeugen. Technische Universität Darmstadt 3
Algorithmen-Visualisierung 1. Bearbeite die Kanten sortiert nach ihrem Kantengewicht. Start Sortiere Kanten 2. Wähle die nächste Kante mit dem kleinsten Kantengewicht. 3. Verwerfe sie, wenn sie zusammen mit den bereits ausgewählten Kanten einen Kreis bildet. Noch unbetrachtete Kanten? Ende nein ja Wähle Kante 4. Anderenfalls füge sie der Menge der ausgewählten Kanten hinzu. Kante bildet Kreis? ja nein 5. Wiederhole alle Schritte ab 2. verwerfen Kante hinzufügen Technische Universität Darmstadt 4
Programm-Visualisierung def kruskal ( E, fe ): E.sort ( fe ) Tree = [ ] for e in E: ==> if hascycle( Tree+[e,] ): pass else: Tree.append( e ) return Tree Technische Universität Darmstadt 5
Daten-Visualisierung 1 2 3 4 5 6 7 1 2 3 4 5 6 7 Technische Universität Darmstadt 6
Was angezeigt werden soll Quelltexte Eingangsgraph Hilfsgraphen Interne Datenstrukturen Traces von Variablen Rekursionen Technische Universität Darmstadt 7
Zwei Arten der Visualisierung Ereignisgesteuert Datengesteuert Technische Universität Darmstadt 8
Ereignisgesteuert Das Programm steuert die Animation for e in E: display. colorize ( e,red ) if hascycle( Tree+[e,] ): display. colorize ( e,gray ) else: Tree.append( e ) display. colorize ( e,blue ) Zum Beispiel LEDA Wo ist der Algorithmus? Technische Universität Darmstadt 9
Externe Darstellungen AspectJ Erfordert Java als Programmiersprache Typecasts Basiert auf Methodenaufrufen tie Visualisierung wird erst zur Übersetzungszeit mit dem Programm verwoben Wie wird die Konsistenz sichergestellt? Wie kompliziert ist die Adaption für andere Implementierungen? Technische Universität Darmstadt 10
Datengesteuert Die Datenstrukturen steuern die Animation E = AnimatedList( E ) Tree = AnimatedSet() for e in E: if not hascycle( Tree+[e,] ): Tree.append( e ) Zum Beispiel GATO Wo und wie wird e nun eingefärbt? Technische Universität Darmstadt 11
Leonardo Underlaying programaugmented program Functions and procedures definitions Data structures definitions Predicates definitions Program execution machine Write Read Underlaying Program Computation Concrete data structures Read Predicates interpreter Abstraction Recovery Computation P.computation request High level data structures P. results Visualization request Execution Time Visualizer Rendering libraries Image Rendering Computation Programming Time C-Compiler Virtuelle Maschine Undo -Funktion Visualisierungssprache Alpha Entwicklungsumgebung Grapheneditor Technische Universität Darmstadt 12
Datenfluß Graph Editor Layout Structure Algorithm Execution Environment Log/Trace Visualization System Visualization Datastructure Library Visualization Specification Visualization Library Eingabespezifikation Visualisierungssystem Programmausgabe Technische Universität Darmstadt 13
Interpreter als Virtuelle Maschine Interpreter liefert virtuelle Maschine gratis In wie weit lassen sich die interessanten Informationen automatisch aus dem Ablauf extrahieren? Model: Die Datenstrukturen View: Sicht auf die Daten Controller: Der Algorithmus Technische Universität Darmstadt 14
Python Inerpretiert Erlaubt das Experimentieren Untypisiert Keine störenden Typumwandlungen Objektorientiert Zusätzlicher Freiheitsgrad Minimalistisch Leicht zu lernen Platformunabhängig Leicht austauschbar Sandbox, Debugger, Parser, Jython,... Technische Universität Darmstadt 15
Python Wrapper Erlaubt das Protokollieren aller Veränderungen 72 Methodenaufrufe: Numerische Typen Listen, Tupel, assoziative Felder Klassen, Instanzen Methoden, Funktionen Problem: Wertzuweisung Technische Universität Darmstadt 16
Python Tracer Nutzt Python Debugger-Schnittstelle Protokolliert wichtige Ereignisse: Funktionsaufrufe inklusive aller Parameter Rückgabewerte Ausnahmebedingungen Programmzeilenausführungen Problem: Programmzeilen schlecht auswertbar Technische Universität Darmstadt 17
Python Parser * Syntaktische Analyse der Programmzeilen Zugriff auf abstrakten Syntaxbaum zur Laufzeit Ermöglicht das Aufzeichnen von Strukturinformationen Schleifenkopf Schleifenkörper Testbedingungen Diese können der Informationsrückgewinnung dienen Technische Universität Darmstadt 18
XML Mapping Dynamischer Programmablaufbaum Wertzuweisungen, Änderungen Wertabfragen, Vergleiche Strukturinformationen Export als XML Struktur Navigation über XPath mit Standardprogrammen Transformation mit XSLT in Ausgabeformate Technische Universität Darmstadt 19
Was wurde (nicht) betrachtet Eingabe von Graphen Verwendung von Algorithmenbibliotheken Datenstruktursammlungen Generierung der Animationen Didaktische Gesichtspunkte Technische Universität Darmstadt 20
Was bleibt zu tun Implementierung des Parsers Vergleich der Ergebnisse mit existierenden Lösungen Extraktion der Informationen für Animationen Weitere Datenstrukturen und Algorithmen implementieren Die anderen beobachten Technische Universität Darmstadt 21