Hinweise Aufgabe 1

Werbung
VL Peer-2-Peer Netzwerke
SS 2010
Dr. Dominic Battré, Martin Raack
Übungszettel 2
Hinweise
• Übungen können in Gruppen beliebiger Größe bearbeitet werden
• Abgabe per e-Mail an [email protected] oder in Briefkasten vor EN-159
(deutlich mit den Worten “Peer-to-Peer Netzwerke VL” markieren)
• Alle abgegebenen Zettel werden korrigiert, es gibt keine fixe Abgabezeit
• Übungen werden nicht benotet – die Bearbeitung wird aber dringend empfohlen!
• Der Stoff der Übungen ist grundsätzlich prüfungsrelevant! Ausnahmen sind mit
Stern gekennzeichnete Aufgaben.
• Homepage der Vorlesung: http://www.cit.tu-berlin.de/?id=76368
Aufgabe 1
Zeichne einen Graphen mit Clustering-Koeffizient 1 und zwei Graphen mit ClusterKoeffizient 0 bestehend aus 5 Knoten. Welche Durchmesser und Charakteristischen
Pfadlängen haben diese Graphen?
Lösung:
Damit ein Graph den Clustering-Koeffizient 1 hat, müssen sich für jeden Knoten alle seine Nachbarn kennen, der Graph muss also eine Clique formen (siehe erster Graph
unten). Der Durchmesser und die Charakteristische Pfadlänge sind beide 1 in diesem
Graphen.
B
B
A
C
E
A
E
C
B
B
D
D
A
C
E
D
A
C
E
D
Die drei folgenden Graphen haben alle den Clustering-Koeffizienten 0, da bei allen
Knoten mit einem Grad ≥ 2 sich die Nachbarn nicht untereinander kennen.
Die folgenden 3 Tabellen stellen die Längen der kürzesten Wege zwischen 2 Knoten
dar:
1
A B C D E
A B C D E
A B C D E
A · 1 2 3 4
A · 1 2 2 1
A · 1 2 3 3
B 1 · 1 2 3
B 1 · 1 2 2
B 1 · 1 2 2
C 2 1 · 1 2
C 2 1 · 1 2
C 2 1 · 1 1
D 3 2 1 · 1
D 2 2 1 · 1
D 3 2 1 · 2
E 4 3 2 1 ·
E 1 2 2 1 ·
E 3 2 1 2 ·
Solche Tabellen können durch wiederholtes Anwenden von Breitensuchen, Dijkstra
oder Floyd-Warshall’s Algorithmus ermittelt werden.
Die Durchmesser der drei Graphen sind 4, 2, und 3. Die Charakteristischen Pfadlängen
40
36
sind: 20
= 2, 30
20 = 1.5 und 20 = 1.8.
Aufgabe 2
Ein ungerichteter G(n, p) Graph ist ein zufälliger ungerichteter Graph mit n Knoten,
wobei die Wahrscheinlichkeit, dass eine Kante zwischen 2 bestimmten Knoten existiert
gleich p ist. Ein ungerichteter G(n, k) Graph ist ein zufälliger ungerichteter Graph mit
n Knoten und genau k Kanten.
Wie kann ich für gegebene Werte (n, p) die Werte für (n, k) finden, sodass die beiden
Graphen G(n, p) und G(n, k) im Erwartungswert gleich viele Kanten besitzen?
Lösung:
Betrachten wir die Adjazenzmatrix eines ungerichteten Graph, mit n Knoten (im Beispiel
unten: n = 5):
A B C D E
A · X X X X
B
· X X X
C
· X X
· X
D
E
·
An den Stellen, die mit X markiert sind, können Kanten eingetragen werden (die
untere linke Hälfte ist ein Spiegelbild der oberen rechten Hälfte und ergibt sich daher
zwangsläufig). In diesem konkreten Graphen können also maximal 10 Kanten erzeugt
werden. Allgemein sind dies
n
X
i=1
(i − 1) =
n−1
X
i=0
i=
n · (n − 1)
2
D.h. für ein gegebenes p können wir den Erwartungswert von k mit
k =p·
n · (n − 1)
2
angeben. Generieren wir viele G(n, p) Graphen, haben diese allerdings natürlich nicht
alle genau k = p · n·(n−1)
Kanten.
2
2
Aufgabe 3
In einem Chord-Netzwerk mit ID-Bereich 0 bis 255 gibt es folgende Knoten: 3, 13, 18,
24, 29, 39, 41, 68, 84, 106, 160, 184, 190, 192, 200, 208, 211, 219, 222, 237
• Ermittele die Finger-Tabelle für die Knoten 29, 39, und 68.
• Über welche Knoten wird eine Nachricht von Knoten 29 an die ID 205 geroutet?
Wie viele Schritte wären theoretisch erwartet worden?
Lösung:
Die erste Tabelle zeigt die idealen Sprungziele der Finger, die zweite die tatsächlich
existierenden.
29
39
68
160
192
1
30
40
69
161
193
2
31
41
70
162
194
4
33
43
72
164
196
8
37
47
76
168
200
16
45
55
84
176
208
32
61
71
100
192
224
64
93
103
132
224
0
128
157
167
196
32
64
29
39
68
160
192
1
39
41
84
184
200
2
39
41
84
184
200
4
39
68
84
184
200
8
39
68
84
184
200
16
68
68
84
184
208
32
68
84
106
192
237
64
106
106
160
237
3
128
160
184
200
39
68
Knoten 29 springt auf Knoten 160 (Finger 128), Knoten 160 springt auf 192, da 237
zu weit ist. Knoten 192 hat einen Zeiger auf 208, kann diesen jedoch nicht nutzen, da
er hinter dem Ziel 205 liegt. Er muss daher auf 200 springen. Dieser leitet die Nachricht
dann an seinen Nachfolger 208 weiter.
Die theoretische Worst-Case Laufzeit liegt bei O(log(N )). N ist die Anzahl der Knoten,
also 20. log(20) ist ca. 4.3. Wenn man genauer in den Beweis guckt, sieht man, dass die
Konstante 2 ist, also eine Schranke von 2 log(N ) bewiesen wurde, dies ist also ca. 8.6.
Andersherum kann man sich überlegen, dass bei kontinuierlicher Halbierung eine Distanz von 205 − 29 = 176 IDs in log(176) Schritten zu überwinden ist, das ist ca. 7.5.
Beispiel: 176, 88, 44, 22, 11, 5, 2, 1, 0. Für größere ID-Räume sähe das ganz anders aus.
Die Distanz log(2176 ) wäre erst in 176 Schritten überwunden, wenn der ID Raum sehr
stark besetzt wäre.
Aufgabe 4
Für das Routing in Chord benötigt man den Test “id ∈ (n, successor ]”. Wie kann man
diesen implementieren, sodass er auch über die Ringgrenze (Sprung von 2n auf 0) funktioniert?
3
Lösung:
public static boolean isBetween(long id1, long id, long id2) {
if (id1 < id2) {
return id > id1 && id <= id2;
} else {
return id > id1 || id <= id2;
}
}
Aufgabe 5
In der Vorlesung haben wir untere und obere Schranken für die Größe des Intervalls
eines Chord-Knotens kennengelernt. Die obere Schranke sagt allerdings nur aus, dass es
unwahrscheinlich ist, dass ein Knoten ein Intervall hat, welches größer als O(log N/N )
ist. Entsprechendes gilt für die untere Schranke.
Eine Möglichkeit, hiervon eine genauere Vorstellung zu bekommen, sind Simulationen.
Hierbei simuliert man den Aufbau eines Chord-Netzwerkes z.B. 1000 mal, und bestimmt
anschließend den Durchschnitt bestimmter interessanter Parameter.
Programmiere eine solche Simulation: Pro Durchlauf werden N Knoten zufällig auf
dem Ring angeordnet, und dann wird die Größe des kleinsten sowie die Größe des größten
Intervalls bestimmt. Nach X Durchläufen wird der Durchschnitt dieser Werte berechnet.
Lasse die Simulation für N = 100, N = 1000, N = 10000 laufen (jeweils X = 1000
Durchläufe). Gib die ermittelten Werte sowie die Vergleichswerte log N/N und 1/N 2 an.
Hinweis: Normiere die Ringgröße auf 1, die ID kann dann durch einen double-Wert
angegeben werden.
Lösung:
N
1/N 2
min log(N )/N
max
100 1.0E-4 1.0066E-4
0.06644 0.05188
1000 1.0E-6 1.0011E-6
0.00997 0.00746
10000 1.0E-8 0.9993E-8
0.00133 0.00098
4
Herunterladen