Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Ähnliche Präsentationen


Präsentation zum Thema: "Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf."—  Präsentation transkript:

1 Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf

2 Zeichnen von Bäumen 1. Was ist ein Baum? 2. Generelle Wünsche 3. Ästhetische Regeln 4. Geschichtete Zeichnungen 5. Andere Algorithmen

3 Was ist ein Baum? Baum wie üblich definiert m-ärer Baum: max m Kinder Kinder ev. geordnet Kind von Binärbaum links oder rechts freier Baum:ohne Wurzel

4 Generelle Wünsche Planar Gitter gerade Linien (streng) aufsteigend erhaltene Ordnung aufgeräumt

5 Ästhetische Regeln nach Tilford und Reingold 1. Knoten gleicher Höhe auf gerader Linie, diese parallel 2. Linkes Kind links von Mutter und re 3. Mutter zentriert über Kindern 4. Isomorphismus, gleiche Teilbäume gleich

6 1. Ästhetische Regel Knoten gleicher Höhe auf gerade Linie, diese parallel geschichtete Zeichnungen: Knoten.y = Knoten.Tiefe Algorithmen nur für X-Koordinaten

7 2. Ästhetische Regel Linkes Kind links von Mutter und re nur in geordneten Binärbäumen (m>2)-ären Bäumen: 1 Kind direkt unter Mutter

8 3. Ästhetische Regel Mutter zentriert über Kindern

9 4. Ästhetische Regel Isomorphismus, gleiche Teilbäume gleich

10 Geschichtete Zeichnungen Knoten.y = Knoten.Tiefe firstWalk Verschiebung Teilbaum nur seiner Wurzel gespeichert. secondWalk:Verschiebungen aufsummiert

11 secondWalk secondWalk(knoten, level, sum){ knoten.x = knoten.x + sum; knoten.y = level; für(alleKinder){ secondWalk(kind, level+1, sum + knoten.verschiebung); }

12 Geschichtete Zeichnungen Algorithmus WS verbesserter WS Algorithmus TR Algorithmus von Walker verbesserter Walker

13 Algorithmus WS Wetherell and Shannon firstWalk(knoten, level) für (alleKnoten(post-Order)){ wenn(Knoten hat n Kinder){ n == 0: Knoten.x nächsteX(level); n == 1: Knoten.x r/l Mutter n == 2: zentriere Knoten ü. Kinder } wenn (Knoten.x < nächsteX(level)){ Knoten.x nächsteX(level) Kinder(Teilbäume) schiften }}

14 Algorithmus WS Wetherell und Shannon Achtung: Ästhetische Regel 4 (Isomorphismus) wird nicht beachtet. Platz verschenkt

15 veränderter WS Wetherell und Shanon präsentieren veränderten Algorithmus (l) Mutter nicht mehr über Kindern zentriert.

16 Algorithmus TR Tilford und Reingold Alle vier ästhetischen Regeln beachtet

17 Algorithmus TR Tilford und Reingold Laufzeit O(n) beide Teilbäume unabhängig fertig, nur noch verschieben Wurzeln nebeneinander plaziert auseinander schieben bis kein Knoten mehr berührt

18 Algorithmus TR Tilford und Reingold Problem: wie Rändern folgen? Der linken Kante zu folgen reicht nicht aus: Idee: nächster Knoten Kind von diesem oder dieser Blatt. Bei Blatt Pointer auf nächsten Knoten

19 Algorithmus TR Für m-äre Bäume Links/rechts klebendes Problem

20 Algorithmus TR Für m-äre Bäume, Spiegelung

21 Algorithmus von Walker Verbesserung TR Unterbäume gut verteilt Laufzeit immer noch O(n) laut Walker(!!!)

22 Algorithmus Walker

23 firstWalk Alg. Walker void firstWalk(knoten, level){ knoten.x = 0; wenn(knoten.hatLSchw()){ knoten.x = knoten.lSchw.x + DIS; } wenn(!knoten.istBlatt()){ für(alleKinder){ firstWalk(kind, level + 1); }

24 firstWalk Alg. Walker m =(lKind.x + rKind.x)/2; wenn(knoten.hatLSchw()){ knoten.verschiebung = knoten.x - m; apportion(knoten, level); } sonst { // knoten linkestes Kind knoten.x = m; //zentriert ü. Kindern }

25 Apportion Alg. Walker Apportion(..) verhindert links/ rechts kleben. zwischen linker und rechter Teilbaum Bäume gleichmäßig verteilt Wird für jeden Knoten aufgerufen Aber Laufzeit Apportion nicht konstant => Laufzeit Walker O(n 2/3 )

26 Apportion Alg. Walker void apportion(knoten, level){ eins = knoten.erstesKind(); nachbar = linkerNachbar(eins); tiefe = 1; solange(eins != ø && nachbar != ø){ rPosi = eins.posi(tiefe); lPosi = nachbar.posi(tiefe); vNachbar = nachbar.Vorfahr(tiefe); abstand = rPosi + TB_TRENN - lPosi; wenn(abstand > 0){ nrSchw = knoten.nrLSchw(vNachbar);

27 Apportion Alg. Walker wenn(knoten.hatSchw(vNachbar)){ teil = abstand / nrSchw; für(alle Schwestern bis vNachbar){ schwester.x += abstand; schwester.verschiebung += abstand abstand = abstand-teil; }}} wenn(eins.istBlatt()){ eins = knoten.holLinkestes(knoten, 0, tiefe); } sonst { eins = erstes.erstesKind(); } nachbar = linkerNachbar(eins); //fehlt bei //Walker, macht sonst keinen Sinn }}

28 Apportion knoten erstes nachbar vNachbar Tiefe = 1 abstand > 0

29 Apportion knoten vNachbar erstesnachbar Tiefe = 2 abstand > 0

30 Apportion knoten vNachbar erstesnachbar Tiefe = 3 abstand = 0

31 Apportion knoten vNachbar erstesnachbar Tiefe = 4 abstand = 0

32 Apportion knoten vNachbar erstesnachbar Tiefe = 5 Ø Fertig!

33 Verbesserter Walker O(n) Buchheim, Jünger und Leipert weisen nach, dass Walker in worst- case (n 2/3 ) schlagen anderen Algorithmus vor, verändertes apportion

34 Verändertes Apportion Rändern folgen: wie R und T (Pointer) Vorfahren finden: rechter bekannt, linker nach Schieber und Vishkin O(1) Teilbäume zählen: rechter - linker +1 alle Teilbäume in weiterer Traversierung verschieben => Apportion konstant

35 Laufzeit linearer Walker

36 Andere Algorithmen Radiale Zeichnungen HV-Zeichnungen rechtsschwere HV- Zeichnungen

37 Radiale Zeichnungen Häufig für freie Bäume Algorithmen ähnlich geschichtete

38 Radiale Zeichnungen Teilbäume beschränkt auf konvexe Ausschnitte sonst nicht planar Tangente durch Knoten Teilbaum zwischen a und b

39 HV-Zeichnungen

40 HV = horizontal-vertical Nur für Binärbaume, unterstützt Gitterzeichnung Ordnung kann erhalten bleiben die die Teilbäume umgebenen Rechtecke schneiden sich nicht

41 HV-Algorithmus Divide: Rekursiv linken und rechten Teilbaum konstruieren Conquer: horizontale (a) oder vertikale (b) Kombination

42 Ordnung nicht erhalten Höhe max log(n) Conquer: mit horizontaler Kombination größerer Teilbaum rechts von anderem rechtsschwere HV- Zeichnungen


Herunterladen ppt "Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf."

Ähnliche Präsentationen


Google-Anzeigen