7. Übung zu Algorithmen I Institut für Theoretische Informatik, Prof. Sanders 1 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders KIT – die Kooperation von7.Forschungszentrum GmbH und Universität Karlsruhe (TH) Übung zu Algorithmen Karlsruhe I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Organisatorisches Raumverlegung: Tutorium 10 von 131 nach -102 (Hörsaal) am 30.6. und 14.7. Mittsemesterklausur: Name fehlt bei IDs 228, 313, 346; bitte vorbeikommen und Schriftprobe abgeben Übungsschein: insgesamt 5 Übungsblätter im zweiten Teil ⇒ 120 Pflichtpunkte Hälfte der überschüssigen Punkte des 2. Teils können für den 1. Teil verwendet werden. Das 2. Programmier-Übungsblatt wird 24 Punkte + 8 Zusatzpunkte haben. 2 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Demos (a, b )-Baum Vorbemerkung Elemente können nur in Blättern oder auch in inneren Knoten/Wurzel gespeichert werden. hier: nur in Blättern sonst auch oft: in inneren Knoten/Wurzel (2, 4)-Baum (Elemente auch in inneren Knoten): http://www.cs.unm.edu/~rlpm/499/ttft.html B-Baum (ähnlich): http://slady.net/java/bt/view.php?w=800&h=600 3 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Rot-Schwarz-Bäume Binärbaum Kanten entweder rot oder schwarz Invarianten a) gleiche Anzahl schwarzer Kanten von Wurzel zu jedem Blatt b) Blätter haben schwarze Eingangskanten. c) Kein Pfad von Wurzel nach Blatt enthält zwei aufeinanderfolgende rote Kanten. Eigenschaften balanciert: Höhe garantiert nur logarithmisch in #Elemente logarithmische Laufzeit für Operationen 4 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Isomorphie von (2, 4)-Bäumen und Rot-Schwarzen-Bäumen (2, 4)-Bäume und Rot-Schwarz-Bäume sind isomorph. a a·· a b a ⇔ b a b a ab· a c b a ⇔ c b a b b oder c b a abc a b c d ⇔ a c b c d entspricht Mini-Baum in jedem (2, 4)-Baum-Knoten 5 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Höhe eines (a, b )-Baums Obere und untere Schranken j Aus der Vorlesung: Höhe h ≤ 1 + loga n +1 2 k Auf dem letzten Übungsblatt: Minimale und maximale Anzahl Elemente bei gegebener Höhe h? In dieser Übung: Höhe h ≥ dlogb (n + 1)e Wozu die Abschätzung der Höhe? Alle Operationen garantieren, dass alle Blätter gleich tief sind. Erlaubt Laufzeitschranken für Operationen: locate, insert, remove, . . . in O(log n) für {a, b } ⊆ O(1) 6 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Höhe eines (a, b )-Baums Zu zeigen: h ≥ dlogb (n + 1)e Beweis: Fall n = 1: h = 1 Fall n > 1: Jeder innere Knoten hat Grad ≤ b. ⇒≤ bh Blätter. Es gibt n + 1 Blätter. Also n + 1 ≤ bh ⇒ h ≥ logb (n + 1) Rundung folgt weil h eine ganze Zahl ist. 7 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Scharfe Schranken j h = 1 + loga n +1 2 k 1 ∞ 1 j n = 1, h = 1 + loga 8 17. Juni 2009 n +1 2 k = 1 + bloga 1c = 1 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Scharfe Schranken j h = 1 + loga n +1 2 k a 1 2 ···a−1 1 2 3 ··· j n = 2a − 1, h = 1 + loga 8 17. Juni 2009 a + 1 a + 2 · · · 2a − 1 a n +1 2 a+1 a+2 a+3 k ··· 2a − 1 ∞ = 1 + bloga ac = 2 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Scharfe Schranken j h = 1 + loga n +1 2 k a 1 2 ···a−1 1 2 3 ··· j n = 2a − 1, h = 1 + loga a + 1 a + 2 · · · 2a − 1 a n +1 2 a+1 a+2 a+3 k ··· 2a − 1 ∞ = 1 + bloga ac = 2 Induktionsschritt h à h + 1 : Statt einem Blatt hänge einen weiteren Knoten mit a Blättern an. Spezialbehandlung für ∞. 8 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Scharfe Schranken h = dlogb (n + 1)e 1 2 ···b −2 1 2 3 ··· b−1 ∞ n = b − 1, h = dlogb (n + 1)e = dlogb (b )e = 1 9 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Scharfe Schranken h = dlogb (n + 1)e 1 2 ···b −2 1 2 3 ··· b−1 ∞ n = b − 1, h = dlogb (n + 1)e = dlogb (b )e = 1 Induktionsschritt h à h + 1 : Statt einem Blatt hänge einen weiteren Knoten mit b Blättern an. Spezialbehandlung für ∞. 9 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Terminologie adjazent Zwei Knoten eines Graphen sind adjazent, wenn sie durch eine gemeinsame Kante verbunden sind. inzident Einen Knoten und eine Kante eines Graphen sind inzident, wenn der Knoten ein Endpunkt der Kante ist. 1 2 3 10 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Adjazenzfelder 2 3 1 4 5 V E 11 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Teilgraphen Teilgraph Sei G = (V , E ) ein Graph. Ein Graph G 0 = (V 0 , E 0 ) ist Teilgraph von G :⇔ V 0 ⊆ V und E 0 ⊆ E. 4 5 3 5 3 6 2 6 2 1 1 ist Teilgraph von 12 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Teilgraphen Teilgraph Sei G = (V , E ) ein Graph. Ein Graph G 0 = (V 0 , E 0 ) ist Teilgraph von G :⇔ V 0 ⊆ V und E 0 ⊆ E. 4 5 3 5 3 6 2 6 2 1 1 ist kein Teilgraph von 12 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Knoteninduziertere Teilgraphen Knoteninduzierter Teilgraph Sei G = (V , E ) ein Graph. Ein Graph G 0 = (V 0 , E 0 ) ist knoteninduzierter Teilgraph von G :⇔ V 0 ⊆ V und E 0 = {(v , w ) ∈ E | v , w ∈ V 0 }. 4 5 3 5 3 6 2 6 2 1 1 ist knoteninduzierter Teilgraph von 13 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Knoteninduziertere Teilgraphen Knoteninduzierter Teilgraph Sei G = (V , E ) ein Graph. Ein Graph G 0 = (V 0 , E 0 ) ist knoteninduzierter Teilgraph von G :⇔ V 0 ⊆ V und E 0 = {(v , w ) ∈ E | v , w ∈ V 0 }. 4 5 3 5 3 6 2 6 2 1 1 ist kein knoteninduzierter Teilgraph von 13 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) K -core K -core Der größte knoteninduzierte Teilgraph G 0 = (V 0 , E 0 ) von G mit ∀v ∈ V 0 : Grad(v ) ≥ K ist der K -core von G. 4 4 5 3 5 3 6 2 6 2 1 1 ist 2-core von 14 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) K -core K -core Der größte knoteninduzierte Teilgraph G 0 = (V 0 , E 0 ) von G mit ∀v ∈ V 0 : Grad(v ) ≥ K ist der K -core von G. 4 5 3 5 3 6 2 6 2 1 ist 3-core von 14 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) K -core K -core Der größte knoteninduzierte Teilgraph G 0 = (V 0 , E 0 ) von G mit ∀v ∈ V 0 : Grad(v ) ≥ K ist der K -core von G. 4 5 3 6 2 1 ist 4-core von 14 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Einfacher Algorithmus zur Berechnung des K -cores Procedure core(G = (V , E ), K : N) G 0 = (V 0 , E 0 ) : = G while (∃v ∈ V 0 with GradG0 (v ) < K ) Remove v from V 0 and all its incident edges from E 0 return G 0 Frage: Laufzeit für diesen Algorithmus? a) O(n + m ) b) O(n log n + m ) ¡ ¢ c) O n2 + m 15 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Einfacher Algorithmus zur Berechnung des K -cores Procedure core(G = (V [1..n + 1], E [1..m ]), K : N) // Adjazenzfeld Q : FIFO d : Array[1..n] of N for (v := 1; v ≤ n; + + v ) d [v ] : = V [v + 1] − V [v ] if (d [v ] < K ) Q.pushBack(v ) while (!Q.empty()) v := Q.popFront() for (e := V [v ]; e < V [v + 1]; + + e) w : = E [e ] d [w ] − − if (d [w ] = K − 1) Q.pushBack(w) return subgraph induced by the nodes v with d [v ] ≥ K 16 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Einfacher Algorithmus zur Berechnung des K -cores Procedure core(G = (V [1..n + 1], E [1..m ]), K : N) // Adjazenzfeld Q : FIFO d : Array[1..n] of N for (v := 1; v ≤ n; + + v ) d [v ] : = V [v + 1] − V [v ] if (d [v ] < K ) Q.pushBack(v ) while (!Q.empty()) v := Q.popFront() for (e := V [v ]; e < V [v + 1]; + + e) w : = E [e ] d [w ] − − if (d [w ] = K − 1) Q.pushBack(w) return subgraph induced by the nodes v with d [v ] ≥ K Laufzeit: O(n + m ) 16 17. Juni 2009 Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders 7. Übung zu Algorithmen I KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)