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