\documentclass{bschlangaul-aufgabe} \bLadePakete{graph} \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe}, Thematik = {Prim nach Adjazenzmatrix, Tripelnotation}, Referenz = 46115-2018-F.T1-A8, RelativerPfad = Examen/46115/2018/03/Thema-1/Aufgabe-8.tex, ZitatSchluessel = examen:46115:2018:03, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Algorithmus von Prim, Algorithmus von Kruskal}, EinzelpruefungsNr = 46115, Jahr = 2018, Monat = 03, ThemaNr = 1, AufgabeNr = 8, } \begin{bGraphenFormat} s: 0 -3 a: 2 0 b: 0 3 c: 2 2 d: 2 -2 e: 6 -3 f: 6 3 g: 6 1 h: 6 -1 a -- c: 0 a -- d: 8 a -- f: 11 b -- d: 5 b -- f: 10 c -- f: 1 d -- e: 2 d -- f: 3 d -- h: 6 e -- h: 11 g -- f: 7 g -- h: 4 s -- b: 3 s -- e: 7 \end{bGraphenFormat} Berechnen Sie mithilfe des Algorithmus von Prim ausgehend vom Knoten $s$ einen minimalen Spannbaum des ungerichteten Graphen $G$, der durch folgende Adjazenzmatrix gegeben ist: \index{Algorithmus von Prim} \footcite{examen:46115:2018:03} \[ \begin{blockarray}{cccccccccc} & s & a & b & c & d & e & f & g & h \\ \begin{block}{c(ccccccccc)} s & * & - & 3 & - & - & 7 & - & - & - \\ a & - & * & - & 0 & 8 & - & 11 & - & - \\ b & 3 & - & * & - & 5 & - & 10 & - & - \\ c & - & 0 & - & * & - & - & 1 & - & - \\ d & - & 8 & 5 & - & * & 2 & 3 & - & 6 \\ e & 7 & - & - & - & 2 & * & - & - & 11 \\ f & - & 11 & 10 & 1 & 3 & - & * & 7 & - \\ g & - & - & - & - & - & - & 7 & * & 4 \\ h & - & - & - & - & 6 & 11 & - & 4 & * \\ \end{block} \end{blockarray} \] \begin{enumerate} \item Erstellen Sie dazu eine Tabelle mit zwei Spalten und stellen Sie jeden einzelnen Schritt des Verfahrens in einer eigenen Zeile dar. Geben Sie in der ersten Spalte denjenigen Knoten $v$, der vom Algorithmus als nächstes in den Ergebnisbaum aufgenommen wird (dieser sog. schwarze Knoten ist damit fertiggestellt) als Tripel $(v, p, \delta)$ mit $v$ als Knotenname, $p$ als aktueller Vorgängerknoten und $\delta$ als aktuelle Distanz von $v$ zu $p$ an. Führen Sie in der zweiten Spalte alle anderen vom aktuellen Spannbaum direkt erreichbaren Knoten $v$ (sog. graue Randknoten) ebenfalls als Tripel $(v, p, \delta)$ auf. Zeichnen Sie anschließend den entstandenen Spannbaum und geben Sie sein Gewicht an. \begin{bAntwort} Der Graph muss nicht gezeichnet werden. Der Algorithmus kann auch nur mit der Adjazenzmatrix durchgeführt werden. Möglicherweise geht das Lösen der Aufgabe schneller mit der Matrix von der Hand. \bPseudoUeberschrift{Kompletter Graph} \begin{center} \begin{tikzpicture}[li graph] \node (s) at (0,-3) {s}; \node (a) at (2,0) {a}; \node (b) at (0,3) {b}; \node (c) at (2,2) {c}; \node (d) at (2,-2) {d}; \node (e) at (6,-3) {e}; \node (f) at (6,3) {f}; \node (g) at (6,1) {g}; \node (h) at (6,-1) {h}; \path (a) edge node {0} (c); \path (a) edge node {8} (d); \path (a) edge node {11} (f); \path (b) edge node {5} (d); \path (b) edge node {10} (f); \path (c) edge node {1} (f); \path (d) edge node {2} (e); \path (d) edge node {3} (f); \path (d) edge node {6} (h); \path (e) edge node {11} (h); \path (g) edge node {7} (f); \path (g) edge node {4} (h); \path (s) edge node {3} (b); \path (s) edge node {7} (e); \end{tikzpicture} \end{center} \bPseudoUeberschrift{Tabelle schwarz-graue-Knoten} \begin{tabular}{ll} \bf{schwarze} & \bf{graue} \\ \hline (s, null, -) & (b, s, 3); (e, s, 7); \\ (b, s, 3) & (d, b, 5); (e, s, 7); (f, b, 10); \\ (d, b, 5) & (a, d, 8); (e, d, 2); (f, d, 3); (h, d, 6); \\ (e, d, 2) & (a, d, 8); (f, d, 3); (h, d, 6); \\ (f, d, 3) & (a, d, 8); (c, f, 1); (g, f, 7); (h, d, 6); \\ (c, f, 1) & (a, c, 0); (g, f, 7); (h, d, 6); \\ (a, c, 0) & (g, f, 7); (h, d, 6); \\ (h, d, 6) & (g, h, 4); \\ (g, h, 4) & \\ \end{tabular} \bigskip Gewicht des minimalen Spannbaums: 24 \bPseudoUeberschrift{Minimaler Spannbaum} \begin{center} \begin{tikzpicture}[li graph] \node (s) at (0,-3) {s}; \node (a) at (2,0) {a}; \node (b) at (0,3) {b}; \node (c) at (2,2) {c}; \node (d) at (2,-2) {d}; \node (e) at (6,-3) {e}; \node (f) at (6,3) {f}; \node (g) at (6,1) {g}; \node (h) at (6,-1) {h}; \path (a) edge node {0} (c); % \path (a) edge node {8} (d); % \path (a) edge node {11} (f); \path (b) edge node {5} (d); % \path (b) edge node {10} (f); \path (c) edge node {1} (f); \path (d) edge node {2} (e); \path (d) edge node {3} (f); \path (d) edge node {6} (h); % \path (e) edge node {11} (h); % \path (g) edge node {7} (f); \path (g) edge node {4} (h); \path (s) edge node {3} (b); % \path (s) edge node {7} (e); \end{tikzpicture} \end{center} \end{bAntwort} %% % (b) %% \item Welche Worst-Case-Laufzeitkomplexität hat der Algorithmus von Prim, wenn die grauen Knoten in einem Heap nach Distanz verwaltet werden? Sei dabei $n$ die Anzahl an Knoten und $m$ die Anzahl an Kanten des Graphen. Eine Begründung ist nicht erforderlich. \begin{bAntwort} $\mathcal{O}(m + n \log n)$ \end{bAntwort} %% % (c) %% \item Beschreiben Sie kurz die Idee des alternativen Ansatzes zur Berechnung eines minimalen Spannbaumes von Kruskal. \index{Algorithmus von Kruskal} \begin{bAntwort} Kruskal wählt nicht die kürzeste an einen Teilgraphen anschließende Kante, sondern global die kürzeste verbliebene aller Kanten, die keinen Zyklus bildet, ohne dass diese mit dem Teilgraph verbunden sein muss. \end{bAntwort} \end{enumerate} \end{document}