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

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

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

Page 1: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Zeichnen von BäumenSeminar Graphenzeichnen SS03von Lina Wolf

Page 2: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Zeichnen von Bäumen

1. Was ist ein Baum?2. Generelle Wünsche3. Ästhetische Regeln4. Geschichtete Zeichnungen5. Andere Algorithmen

Page 3: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

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

Page 4: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

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

Page 5: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Ästhetische Regelnnach Tilford und Reingold

1. Knoten gleicher Höhe auf gerader Linie, diese parallel2. Linkes Kind links von Mutter und re3. Mutter zentriert über Kindern4. Isomorphismus, gleiche Teilbäume gleich

Page 6: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

1. Ästhetische RegelKnoten gleicher Höhe auf gerade Linie, diese parallel

geschichtete Zeichnungen: Knoten.y = Knoten.Tiefe Algorithmen nur für X-Koordinaten

Page 7: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

2. Ästhetische RegelLinkes Kind links von Mutter und re

nur in geordneten Binärbäumen

(m>2)-ären Bäumen: 1 Kind direkt unter Mutter

Page 8: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

3. Ästhetische RegelMutter zentriert über Kindern

Page 9: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

4. Ästhetische RegelIsomorphismus, gleiche Teilbäume gleich

Page 10: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

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

Page 11: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

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

Page 12: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Geschichtete Zeichnungen

•Algorithmus WS•verbesserter WS•Algorithmus TR•Algorithmus von Walker•verbesserter Walker

Page 13: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Algorithmus WSWetherell 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}}

Page 14: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Algorithmus WSWetherell und Shannon

Achtung: Ästhetische Regel 4 (Isomorphismus) wird nicht beachtet.

Platz verschenkt

Page 15: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

veränderter WS

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

Page 16: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Algorithmus TRTilford und Reingold

Alle vier ästhetischen Regeln beachtet

Page 17: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Algorithmus TRTilford 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

Page 18: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Algorithmus TRTilford 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

Page 19: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Algorithmus TRFür m-äre Bäume

Links/rechts klebendes Problem

Page 20: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Algorithmus TRFür m-äre Bäume, Spiegelung

Page 21: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Algorithmus von Walker

•Verbesserung TR •Unterbäume gut verteilt •Laufzeit immer noch O(n)

laut Walker(!!!)

Page 22: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Algorithmus Walker

Page 23: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

firstWalk Alg. Walkervoid 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);}

Page 24: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

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 }}

Page 25: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

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(n2/3)

Page 26: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Apportion Alg. Walkervoid 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);

Page 27: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

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}}

Page 28: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Apportion

knoten

erstes

nachbar

vNachbar

Tiefe = 1abstand > 0

Page 29: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Apportion

knotenvNachbar

erstesnachbar

Tiefe = 2abstand > 0

Page 30: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Apportion

knotenvNachbar

erstesnachbar

Tiefe = 3abstand = 0

Page 31: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Apportion

knotenvNachbar

erstesnachbar

Tiefe = 4abstand = 0

Page 32: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Apportion

knotenvNachbar

erstesnachbar

Tiefe = 5

Ø Fertig!

Page 33: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

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

Page 34: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

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

Page 35: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Laufzeit linearer Walker

Page 36: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Andere Algorithmen

•Radiale Zeichnungen•HV-Zeichnungen•rechtsschwere HV- Zeichnungen

Page 37: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

Radiale Zeichnungen

•Häufig für freie Bäume•Algorithmen ähnlich geschichtete

Page 38: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

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

Page 39: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

HV-Zeichnungen

Page 40: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

HV-ZeichnungenHV = horizontal-vertical

• Nur für Binärbaume, unterstützt Gitterzeichnung•Ordnung kann erhalten bleiben• die die Teilbäume umgebenen Rechtecke schneiden sich nicht

Page 41: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

HV-AlgorithmusDivide: Rekursiv linken und rechten Teilbaum konstruierenConquer: horizontale (a) oder vertikale (b) Kombination

Page 42: Zeichnen von Bäumen Seminar Graphenzeichnen SS03 von Lina Wolf.

•Ordnung nicht erhalten•Höhe max log(n)•Conquer: mit horizontaler Kombination größerer Teilbaum rechts von anderem

rechtsschwere HV- Zeichnungen