Rot-Schwarz-Bäume - Algorithms and Complexity (Freiburg)

Werbung
Informatik II - SS 2016
(Algorithmen & Datenstrukturen)
Vorlesung 12 (3.6.2016)
Binäre Suchbäume IV
Fabian Kuhn
Algorithmen und Komplexität
Fabian Kuhn
Informatik II, SS 2016
Rot-Schwarz-Bäume
Ziel: Binäre Suchbäume, welche immer balanciert sind
• balanciert, intuitiv: in jedem Teilbaum, links & rechts ≈ gleich gross
• balanciert, formal: Teilbaum mit ๐‘˜ Knoten hat Tiefe ๐‘‚ log ๐‘˜
Rot-Schwarz-Bäume sind binäre Suchbäume, für die gilt:
1) Alle Knoten sind rot oder schwarz
2) Wurzel ist schwarz
3) Blätter (= NIL-Knoten) sind schwarz
4) Rote Knoten haben zwei schwarze Kinder
5) Von jedem Knoten ๐‘ฃ aus, haben alle (direkten) Pfade zu Blättern
(NIL) im Teilbaum von ๐‘ฃ die gleiche Anzahl schwarze Knoten
Fabian Kuhn
Informatik II, SS 2016
2
Tiefe / Schwarz-Tiefe
Definition: Die Tiefe (๐‘ป) eines Knoten ๐‘ฃ ist die maximale Länge eines
direkten Pfades von ๐‘ฃ zu einem Blatt (NIL).
Definition: Die Schwarz-Tiefe (๐‘บ๐‘ป) eines Knoten ๐‘ฃ ist die Anzahl schwarzer
Knoten auf jedem direkten Pfad von ๐‘ฃ zu einem Blatt (NIL)
• Der Knoten ๐‘ฃ wird dabei nicht gezählt, das Blatt (NIL, falls ≠ ๐‘ฃ) jedoch schon!
๐Ÿ๐Ÿ”
๐Ÿ๐Ÿ–
๐Ÿ’๐Ÿ‘
๐Ÿ๐Ÿ‘
๐Ÿ๐Ÿ
๐Ÿ‘๐Ÿ
๐Ÿ“๐Ÿ
NIL NIL
๐Ÿ๐Ÿ•
๐Ÿ๐ŸŽ
๐Ÿ•
๐Ÿ“
๐Ÿ๐Ÿ
๐Ÿ๐Ÿ’
NIL NIL NIL NIL NIL
๐Ÿ๐Ÿ’
๐Ÿ๐Ÿ—
NIL NIL
๐Ÿ๐ŸŽ
๐Ÿ๐Ÿ—
๐Ÿ’๐ŸŽ
NIL NIL NIL NIL
NIL NIL
๐Ÿ‘๐Ÿ•
๐Ÿ’๐Ÿ
NIL NIL NIL NIL
NIL NIL
Fabian Kuhn
Informatik II, SS 2016
3
Tiefe eins Rot-Schwarz-Baumes
Theorem:
Die Tiefe eines Rot-Schwarz-Baumes ist ≤ ๐Ÿ ๐ฅ๐จ๐  ๐Ÿ ๐’ + ๐Ÿ .
Beweis:
• Anzahl innerer Knoten : ๐‘› (alle ausser den NIL-Knoten)
• Lemma:
๐‘› ≥ 2๐‘†๐‘‡ ๐‘Ÿ๐‘œ๐‘œ๐‘ก − 1
Fabian Kuhn
Informatik II, SS 2016
4
Rot-Schwarz-Bäume: Einfügen
insert(x):
1. Einfügen wie üblich, neu eingefügter Knoten ist rot
color
parent
key
left
right
if root == NIL then
root = new Node(x,red,NIL,NIL,NIL)
else
v = root;
while v != NIL and v.key1 != x do
if v.key1 > v.x then
if v.left == NIL then
w = new Node(x,red,v,NIL,NIL); v.left = w
v = v.left
else
if v.right == NIL then
w = new Node(x,red,v,NIL,NIL); v.right = w
v = v.right
Fabian Kuhn
Informatik II, SS 2016
5
Rot-Schwarz-Bäume: Einfügen
Rot-Schwarz-Baum Bedingungen nach dem Einfügen
1. Alle Knoten sind rot oder schwarz
2. Die Wurzel ist schwarz
3. Die Blätter (NIL) sind schwarz
4. Rote Knoten haben zwei schwarze Kinder
5. Von jedem Knoten ๐‘ฃ haben alle direkten Pfade zu Blättern gleich
viele schwarze Knoten
• Falls ๐‘ฃ (eingefügter Knoten) nicht die Wurzel ist oder ๐‘ฃ. parent
schwarz ist, sind alle Bedingungen erfüllt
• Falls ๐‘ฃ die Wurzel ist, kann man ๐‘ฃ einfach schwarz einfügen
• Falls ๐‘ฃ. parent rot ist, müssen wir den Baum anpassen
– so, dass 1, 3 und 5 immer erfüllt sind
– dabei kann die Wurzel auch rot werden…
Fabian Kuhn
Informatik II, SS 2016
6
Erinnerung: Rotationen
๐’–
Rechtsrotation:
๐’—
๐’—
๐’–
๐’—
Linksrotation:
Fabian Kuhn
๐’–
๐’—
๐’–
Informatik II, SS 2016
7
Rot-Schwarz-Bäume: Einfügen
Baum anpassen nach dem Einfügen:
• Annahmen:
–
–
–
–
–
๐‘ฃ ist rot,
๐‘ข โ‰” ๐‘ฃ. parent ist rot (sonst sind wir fertig)
๐‘ฃ ist linkes Kind von ๐‘ข (anderer Fall symmetrisch)
๐‘ฃ’s Geschwisterknoten ๐‘ค (rechtes Kind von ๐‘ข) ist schwarz
Alle roten Knoten ausser ๐‘ข haben 2 schwarze Kinder
๐’‘
๐’‘
๐’–
๐’—
๐’’
๐’’
๐’˜
๐’–
๐’—
๐’˜
• Fallunterscheidung anhand von Farbe von ๐’’ (Geschwister von ๐’–)
und anhand von ๐’– = ๐’‘. ๐ฅ๐ž๐Ÿ๐ญ oder ๐’– = ๐’‘. ๐ซ๐ข๐ ๐ก๐ญ
Fabian Kuhn
Informatik II, SS 2016
8
Rot-Schwarz-Bäume: Einfügen
Fall ๐Ÿ: Geschwisterknoten ๐’’ von ๐’– ist schwarz
• Fall 1a: ๐’– = ๐’‘. ๐ฅ๐ž๐Ÿ๐ญ
๐’‘
๐’–
๐’–
1. right-rotate(p,u)
๐’’
๐’—
๐’—
๐’‘
๐’˜
๐’˜
๐’’
๐’–
๐’—
๐’‘
๐’˜
Fabian Kuhn
๐’’
Informatik II, SS 2016
9
Rot-Schwarz-Bäume: Einfügen
Fall ๐Ÿ: Geschwisterknoten ๐’’ von ๐’– ist schwarz
• Fall 1b: ๐’– = ๐’‘. ๐ซ๐ข๐ ๐ก๐ญ
๐’‘
๐’’
๐’‘
1. right-rotate(u,v)
๐’–
๐’—
๐’’
๐’˜
๐’–
๐’˜
• Nach Rotation:
–
–
–
–
๐’—
symmetrisch zu Fall 1a
๐‘ข, ๐‘ฃ sind rot, Geschwister ๐‘ž is schwarz
๐‘ข ist rechtes Kind von ๐‘ฃ, ๐‘ฃ ist rechtes Kind von ๐‘
Aulösen durch
left-rotate(p,v) und umfärben
Fabian Kuhn
Informatik II, SS 2016
10
Rot-Schwarz-Bäume: Einfügen
Fall ๐Ÿ: Geschwisterknoten ๐’’ von ๐’– ist schwarz
• Fall 1b: ๐’– = ๐’‘. ๐ซ๐ข๐ ๐ก๐ญ
๐’‘
๐’‘
๐’’
1. right-rotate(u,v)
๐’–
๐’—
๐’’
๐’—
๐’˜
๐’–
๐’—
๐’‘
๐’’
Fabian Kuhn
๐’˜
๐’—
3. umfärben
๐’–
๐’˜
๐’‘
๐’’
Informatik II, SS 2016
๐’–
๐’˜
11
Rot-Schwarz-Bäume: Einfügen
Fall 2: Geschwisterknoten ๐’’ von ๐’– ist rot
๐’‘
๐’–
๐’‘
๐’–
๐’’
๐’—
๐’˜
umfärben
๐’—
๐’‘
๐’’
๐’˜
๐’‘
๐’–
๐’—
๐’’
๐’’
๐’˜
๐’–
๐’—
๐’˜
• Falls ๐‘. parent schwarz ist, sind wir fertig
– das ist auch der Fall, falls ๐‘ == root (dann noch root. color โ‰” black)
• Sonst sind wir im gleichen Fall, wie am Anfang
– aber näher an der Wurzel!
Fabian Kuhn
Informatik II, SS 2016
12
Rot-Schwarz-Bäume: Einfügen
1. Füge neuen Schlüssel normal ein
–
Knotenfarbe des neuen Knoten ist rot
2. Solange man in Fall 2 ist, färbe um
–
–
Fall 2: roter Knoten ๐‘ฃ mit rotem Parent-Knoten ๐‘ข
Geschwisterknoten von ๐‘ข ist auch rot
3. Sobald nicht mehr in Fall 2
–
–
–
•
Falls es ein Rot-Schwarz-Baum ist, sind wir fertig
Falls die Wurzel rot ist, muss die Wurzel schwarz gefärbt werden
Ansonsten ist man in Fall 1a oder 1b (oder symmetrisch) und kann mit Hilfe
von höchstens 2 Rotationen und Umfärben von 2 Knoten einen RotSchwarz-Baum erhalten
Laufzeit: ๐‘‚ Baumtiefe = ๐‘‚(log ๐‘›)
Fabian Kuhn
Informatik II, SS 2016
13
Rot-Schwarz-Bäume: Löschen
1. Finde wie üblich einen Knoten ๐‘ฃ, welcher gelöscht wird
–
Knoten ๐‘ฃ hat höchstens ein Nicht-NIL-Kind!
Fallunterscheidung (Farbe von ๐’— und ๐’—. ๐ฉ๐š๐ซ๐ž๐ง๐ญ)
Annahme: ๐‘ฃ ist linkes Kind von ๐‘ข (sonst symmetrisch)
Fall 1: Knoten ๐’— ist rot
• Da ๐‘ฃ mind. 1 NIL-Kind haben muss und es ein Rot-Schwarz-Baum
ist, muss ๐‘ฃ 2 NIL-Kinder haben
๐’–
๐’—
NIL
NIL
• ๐‘ฃ kann einfach gelöscht werden
– Der Baum bleibt ein Rot-Schwarz-Baum
Fabian Kuhn
Informatik II, SS 2016
14
Rot-Schwarz-Bäume: Löschen
Fall 2: Knoten ๐’— ist schwarz
• Fall 2a: ๐’— hat ein (rotes) nicht-NIL-Kind ๐’˜
๐’–
๐’–
๐’—
๐’˜
lösche ๐’—, färbe ๐’˜ schwarz
NIL
NIL
๐’˜
NIL
NIL
NIL
• Fall 2b: ๐’— hat nur NIL-Kinder
๐’–
๐’—
NIL
Fabian Kuhn
๐’–
๐’˜
1. lösche ๐’—
NIL
๐’˜
Knoten ๐‘ข hat jetzt nach
links nur noch
Schwarz-Tiefe 1 (statt 2)
๏ƒ  Wir müssen den Baum
anpassen
NIL
Informatik II, SS 2016
15
Rot-Schwarz-Bäume: Löschen
Problemfall:
• Knoten ๐’— hat nur NIL-Kinder
๐’–
๐’—
NIL
๐’–
๐’˜
NIL
๐’™
1. lösche ๐’—
NIL
๐’˜
Wir korrigieren erstmal die
Schwarz-Tiefe, in dem wir
doppelt schwarz färben
• Ziel: Wir möchten das zusätzliche “Schwarz” den Baum
hochbringen bis wir es entweder bei einem roten Knoten abladen
können oder bis wir die Wurzel erreichen (und damit kein Problem
mehr haben).
• Fallunterscheidung: Farbe von ๐‘ค und der Kinder von ๐‘ค
– Beobachtung: ๐‘ค kann nicht NIL sein (wegen Schwarz-Tiefe)!
Fabian Kuhn
Informatik II, SS 2016
16
Rot-Schwarz-Bäume: Löschen
Annahme:
• Doppelt schwarzer Knoten ๐‘ฅ
• Parent ๐‘ข hat beliebige Farbe (markiert als grün)
• ๐‘ฅ ist linkes Kind von ๐‘ข (rechtes Kind: symmetrisch)
• Geschwisterknoten von ๐‘ฅ (rechtes Kind von ๐‘ข) ist ๐‘ค
Fallunterscheidung:
• Fall A: ๐’˜ ist schwarz, Fall B: ๐’˜ ist rot
๐’–
๐’–
Fall A.1
๐’˜
๐’™
๐’‚
๐’ƒ
Fall A.2
๐’˜
๐’™
๐’‚
Fabian Kuhn
๐’˜
๐’™
๐’–
Fall A.3
๐’‚
๐’–
๐’ƒ
๐’˜
๐’™
๐’ƒ
Informatik II, SS 2016
Fall B
๐’‚
๐’ƒ
17
Rot-Schwarz-Bäume: Löschen
Fall A.1: ๐’˜ ist schwarz, rechtes Kind von ๐’˜ ist rot
๐’–
๐’˜
1. left-rotate(u,w)
๐’˜
๐’™
๐’‚
๐’ƒ
๐’–
๐’™
๐’ƒ
๐’‚
๐’˜
๐’–
๐’™
Fabian Kuhn
๐’ƒ
๐’‚
Informatik II, SS 2016
18
Rot-Schwarz-Bäume: Löschen
Fall A.2: ๐’˜ ist schwarz, l. Kind von ๐’˜ ist rot, r. Kind ist schwarz
๐’–
๐’–
1. right-rotate(w,a)
๐’˜
๐’™
๐’‚
๐’™
๐’‚
๐’˜
๐’ƒ
๐’ƒ
๐’–
๐’™
Jetzt sind wir wieder in Fall A.1
(๐‘Ž übernimmt Rolle von ๐‘ค)
๐’‚
๐’˜
๐’ƒ
Fabian Kuhn
left-rotate(๐‘ข, ๐‘Ž) und umfärben
eliminiert “Doppelschwarz”
Informatik II, SS 2016
19
Rot-Schwarz-Bäume: Löschen
Fall A.3: ๐’˜ ist schwarz, beide Kinder von ๐’˜ sind schwarz
๐’–
๐’–
1. umfärben
๐’˜
๐’™
๐’‚
๐’ƒ
๐’™
๐’˜
๐’‚
๐’ƒ
• Das zusätzliche “Schwarz” wandert eins nach oben
• Falls ๐‘ข rot ist, kann man ๐‘ข jetzt einfach schwarz färben
• Knoten ๐‘ข übernimmt sonst die Rolle von ๐‘ฅ und kann wieder in
einem der Fälle A.1, A.2, A.3 oder B (siehe nächste Folie) sein.
• Fall A.3 kann höchstens ๐‘‚(log ๐‘›) oft vorkommen
– Falls ๐‘ข == root, können wir das zusätzliche “Schwarz” einfach entfernen
• Bei Fall A.1 und A.2 sind wir direkt fertig
Fabian Kuhn
Informatik II, SS 2016
20
Rot-Schwarz-Bäume: Löschen
Fall B: ๐’˜ ist rot
๐’–
๐’˜
1. left-rotate(u,w)
๐’˜
๐’™
๐’‚
๐’ƒ
๐’–
๐’™
๐’ƒ
๐’‚
๐’˜
๐’–
๐’™
Fabian Kuhn
๐’ƒ
๐’‚
Jetzt sind wir in Fall A.1, A.2 oder A.3
• Bei A.1 oder A.2 sind wir in ๐‘‚ 1
Zeit fertig
• Bei A.3 sind wir auch in ๐‘‚(1) Zeit
fertig, weil ๐‘ข jetzt rot ist!
Informatik II, SS 2016
21
Rot-Schwarz-Bäume: Löschen
1. Wie üblich
–
–
Finde Knoten ๐‘ฃ mit mind. 1 NIL-Kind, welcher gelöscht werden kann
๐‘ฃ ist evtl. Vorgänger/Nachfolger von Knoten mit zu löschendem Schlüssel
2. Falls der gelöschte Knoten ๐‘ฃ schwarz ist, muss man korrigieren
–
Es hat einen schwarzen Knoten ๐‘ฅ mit zusätzlichem “Schwarz”
3. Mögliche Fälle: A.1, A.2, A.3, B
–
–
–
–
•
Fall A.1: Mit 1 Rotation und Umfärben von ๐‘‚ 1 Knoten fertig
Fall A.2: Mit 1 Rotation und Umfärben von ๐‘‚(1) Knoten in Fall A.1
Fall A.3: Falls ๐‘ฅ. parent rot ist, mit Umfärben von ๐‘‚(1) Knoten fertig,
falls ๐‘ฅ. parent schwarz ist, wandert zusätzliches “Schwarz”
Richtung Wurzel und man ist ist wieder in A.1, A.2, A.3 oder B
Fall B : 1 Rotation und Umfärben von ๐‘‚ 1 Knoten gibt A.1, A.2 oder A.3,
Falls A.3, dann ist ๐‘ฅ. parent rot
Laufzeit: ๐‘‚ Baumtiefe = ๐‘‚(log ๐‘›)
Fabian Kuhn
Informatik II, SS 2016
22
AVL Bäume
• Siehe z.B. Buch von Ottmann/Widmayer
• Direkte Alternative zu Rot-Schwarz-Bäumen
• AVL Bäume sind binäre Suchbäume, bei welchem für jeden
Knoten ๐‘ฃ gilt, dass
๐‘ป ๐’—. ๐ฅ๐ž๐Ÿ๐ญ − ๐‘ป ๐’—. ๐ซ๐ข๐ ๐ก๐ญ ≤ ๐Ÿ
• Anstatt einer Farbe (rot/schwarz) merkt man sich die Tiefe jedes
Teilbaums
• AVL Bäume haben auch immer Tiefe ๐‘‚ log ๐‘›
– Sogar mit etwas besserer Konstante als Rot-Schwarz-Bäume
• AVL-Bedingung kann bei insert/delete jeweils mit ๐‘‚(log ๐‘›)
Rotationen wieder hergestellt werden
• Vergleich zu Rot-Schwarzbäumen
– Suche ist in AVL Bäumen etwas schneller
– Einfügen / Löschen ist in AVL Bäumen etwas langsamer
Fabian Kuhn
Informatik II, SS 2016
23
(๐‘Ž, ๐‘)-Bäume
•
•
•
•
•
•
Siehe z.B. Vorlesung vom letzten Jahr
Parameter ๐‘Ž ≥ 2 und ๐‘ ≥ 2๐‘Ž − 1
Elemente/Schlüssel sind nur in den Blättern gespeichert
Alle Blätter sind in der gleichen Tiefe
Falls die Wurzel kein Blatt ist, hat sie zwischen 2 und ๐‘ Kinder
Alle anderen inneren Knoten haben zwischen ๐‘Ž und ๐‘ Kinder
– Ein ๐‘Ž, ๐‘ -Baum ist also kein Binärbaum!
Ähnlich: ๐‘ฉ-Bäume
• Da werden in den inneren Knoten Schlüssel gespeichert
• Für grosse ๐‘Ž, ๐‘ braucht man etwas mehr Speicher als bei BST
– Da man meistens gleich für ๐‘ Elemente Platz macht
• Dafür sind die Bäume viel flacher
• Speziell gut z.B. für Dateisysteme (Zugriff sehr teuer)
Fabian Kuhn
Informatik II, SS 2016
24
Weitere Alternativen
AA-Trees:
• ähnlich wie Rot-Schwarz-Bäume (nur rechte Kinder können rot sein)
Splay Trees:
• Binäre Suchbaum mit zusätzlichen guten Eigenschaften
– Elemente, auf welche kürzlich zugegriffen wurde, sind weiter oben
– Gut, falls mehrere Knoten den gleichen Schlüssel haben können
– Allerdings nicht streng balanciert
Skip Lists:
• Verkettete Listen mit zusätzlichen Abkürzungen
– kein balancierter Suchbaum, hat aber ähnliche Eigenschaften
(picture from wikipedia)
Fabian Kuhn
Informatik II, SS 2016
25
Praktische Übungsaufgabe
Programmieren eines Treaps:
• Wir stellen eine Binary Search Tree Implementierung zur
Verfügung, welche Sie dann anpassen sollen
– Sie können entweder die Klasse erweitern oder einfach den gegebenen
Programmcode ergänzen, um einen Treap zu erhalten
• Operationen: insert, delete, find (+ triviale Op.)
• Zusätzlich:
– avgDepth (gibt durchschnittliche Knotentiefe zurück)
– BFS range query (gibt alle Schlüssel in einem Bereich [a,b] in BFSReihenfolge aus)
Fabian Kuhn
Informatik II, SS 2016
26
Graph
Graph ๐‘ฎ = (๐‘ฝ, ๐‘ฌ):
• Knotenmenge ๐‘‰ und Kantenmenge ๐ธ
4
Beispiele:
2
1
1
2
1
2
5
4
2
5
3
6
5
6
3
6
3.4
2
3
1.2
4
−0.8
1.7
1
2.9
Fabian Kuhn
1
4
3
6
4
3
5
Informatik II, SS 2016
5
27
Graph: Notation
Knotenmenge ๐‘ฝ, typischerweise ๐‘› โ‰” |๐‘‰|
Kantenmenge ๐‘ฌ, typischerweise ๐‘š โ‰” ๐ธ
• ungerichteter Graph:
• gerichteter Graph:
๐ธ ⊆ ๐‘ข, ๐‘ฃ โˆถ ๐‘ข, ๐‘ฃ ∈ ๐‘‰
๐ธ ⊆๐‘‰×๐‘‰
Beispiele:
1
1
2
5
2
4
5
3
Fabian Kuhn
4
3
Informatik II, SS 2016
28
Knotengrade
Graph ๐‘ฎ = (๐‘ฝ, ๐‘ฌ) ungerichtet:
• Grad eines Knoten ๐‘ข ∈ ๐‘‰: Anzahl Kanten (Nachbarn) von ๐‘ข
deg ๐‘ข โ‰” ๐‘ข, ๐‘ฃ โˆถ ๐‘ข, ๐‘ฃ ∈ ๐ธ
Graph ๐‘ฎ = (๐‘ฝ, ๐‘ฌ) gerichted:
• Eingangsgrad eines Knoten ๐‘ข ∈ ๐‘‰: Anzahl eingehende Kanten
deg ๐‘–๐‘› (๐‘ข) โ‰” ๐‘ฃ, ๐‘ข โˆถ ๐‘ฃ, ๐‘ข ∈ ๐ธ
• Ausgangsgrad eines Knoten ๐‘ข ∈ ๐‘‰: Anzahl ausgehende Kanten
deg ๐‘œ๐‘ข๐‘ก (๐‘ข) โ‰” ๐‘ข, ๐‘ฃ โˆถ ๐‘ข, ๐‘ฃ ∈ ๐ธ
Fabian Kuhn
Informatik II, SS 2016
29
Pfade
Pfade in einem Graph ๐‘ฎ = (๐‘ฝ, ๐‘ฌ)
• Ein Pfad in ๐บ ist eine Folge ๐‘ข1 , ๐‘ข2 , … , ๐‘ข๐‘˜ ∈ ๐‘‰ mit
– gerichteter Graph: ๐‘ข๐‘– , ๐‘ข๐‘–+1 ∈ ๐ธ für alle ๐‘– ∈ {1, … , ๐‘˜ − 1}
– ungerichteter Graph: ๐‘ข๐‘– , ๐‘ข๐‘–+1 ∈ ๐ธ für alle ๐‘– ∈ {1, … , ๐‘˜ − 1}
Länge eines Pfades (z. T. auch Kosten eines Pfades)
• ohne Kantengewichte: Anzahl der Kanten
• mit Kantengewichten: Summe der Kantengewichte
Kürzester Pfad (shortest path) zwischen Knoten ๐‘ข und ๐‘ฃ
• Pfad ๐‘ข, … , ๐‘ฃ mit kleinster Länge
• Distanz ๐‘‘ ๐‘ข, ๐‘ฃ : Länge eines kürzesten Pfades zwischen ๐‘ข und ๐‘ฃ
Durchmesser ๐‘ซ โ‰” ๐ฆ๐š๐ฑ ๐’…(๐’–, ๐’—)
๐’–,๐’—∈๐‘ฝ
• Länge des längsten kürzesten Pfades
Fabian Kuhn
Informatik II, SS 2016
30
Beispiele: Pfade, Distanzen, Durchmesser
Ungerichteter Graph
Fabian Kuhn
Informatik II, SS 2016
31
Beispiele: Pfade, Distanzen, Durchmesser
Gerichteter Graph
Fabian Kuhn
Informatik II, SS 2016
32
Herunterladen