zeichnen von bäumen seminar graphenzeichnen ss03 von lina wolf

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

Upload: wilhelmine-wurl

Post on 05-Apr-2015

113 views

Category:

Documents


3 download

TRANSCRIPT

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