\documentclass{bschlangaul-aufgabe} \bLadePakete{graph} \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe 10}, Thematik = {Graph a-h}, Referenz = 66115-2018-F.T2-A10, RelativerPfad = Examen/66115/2018/03/Thema-2/Aufgabe-10.tex, ZitatSchluessel = examen:66115:2018:03, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Algorithmus von Prim}, EinzelpruefungsNr = 66115, Jahr = 2018, Monat = 03, ThemaNr = 2, AufgabeNr = 10, } \begin{enumerate} %% % a) %% \item Berechnen Sie mithilfe des Algorithmus von Prim ausgehend vom Knoten $a$ einen minimalen Spannbaum des ungerichteten Graphen $G$, der durch folgende Adjazenzmatrix gegeben ist: \index{Algorithmus von Prim} \footcite{examen:66115:2018:03} % Info_2021-06-18-2021-06-18_13.18.21.mp4 % 2h06m \begin{bGraphenFormat} a: 0 -1 b: 10 -1 c: 4 0 d: 6 3 e: 8 1 f: 6 1 g: 10 4 h: 0 4 a -- b: 1 a -- c: 4 a -- d: 6 a -- h: 5 b -- c: 3 b -- e: 4 b -- g: 7 c -- d: 1 d -- e: 9 d -- f: 6 d -- g: 2 d -- h: 0 e -- f: 5 e -- g: 5 g -- h: 8 h -- h: 1 \end{bGraphenFormat} \[ \begin{blockarray}{ccccccccc} & a & b & c & d & e & f & g & h \\ \begin{block}{c(cccccccc)} a & * & 1 & 4 & 6 & - & - & - & 5 \\ b & 1 & * & 3 & - & 4 & - & 7 & - \\ c & 4 & 3 & * & 1 & - & - & - & - \\ d & 6 & - & 1 & * & 9 & 6 & 2 & 0 \\ e & - & 4 & - & 9 & * & 5 & 5 & - \\ f & - & - & - & 6 & 5 & * & - & - \\ g & - & 7 & - & 2 & 5 & - & * & 8 \\ h & 5 & - & - & 0 & - & - & 8 & 1 \\ \end{block} \end{blockarray} \] \begin{center} \begin{tikzpicture}[li graph,every loop/.style={}] \node (a) at (0,-1) {a}; \node (b) at (10,-1) {b}; \node (c) at (4,0) {c}; \node (d) at (6,3) {d}; \node (e) at (8,1) {e}; \node (f) at (6,1) {f}; \node (g) at (10,4) {g}; \node (h) at (0,4) {h}; \path (a) edge node {1} (b); \path (a) edge node {4} (c); \path (a) edge node {6} (d); \path (a) edge node {5} (h); \path (b) edge node {3} (c); \path (b) edge node {4} (e); \path (b) edge node {7} (g); \path (c) edge node {1} (d); \path (d) edge node {9} (e); \path (d) edge node {6} (f); \path (d) edge node {2} (g); \path (d) edge node {0} (h); \path (e) edge node {5} (f); \path (e) edge node {5} (g); \path (g) edge node {8} (h); \path (h) edge[loop above] node {1} (h); \end{tikzpicture} \end{center} 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 sein Gewicht an. \begin{bAntwort} \begin{tabular}{l|l} „schwarze“ & „graue“ Randknoten \\\hline\hline (a, NULL, $\infty$) & (b, a, 1) (c, a, 4) (h, a, 5) (d, a, 6) \\\hline (b, a, 1) & (c, b, 3) (e, b, 4) (h, a, 5) (d, a, 6) (g, b, 7) \\\hline (c, b, 3) & (d, c, 1) (e, b, 4) (h, a, 5) (g, b, 7) \\\hline (d, c, 1) & (h, d, 0) (g, d, 2) (e, b, 4) (f, d, 6)\\\hline (h, d, 0) & (g, d, 2) (e, b, 4) (f, d, 6) \\\hline (g, d, 2) & (e, b, 4) (f, d, 6) \\\hline (e, b, 4) & (f, e, 5) \\\hline (f, e, 5) & \\\hline \end{tabular} \begin{center} \begin{tikzpicture}[li graph,x=0.8cm,y=0.8cm] \node (a) at (0,-1) {a}; \node (b) at (10,-1) {b}; \node (c) at (4,0) {c}; \node (d) at (6,3) {d}; \node (e) at (8,1) {e}; \node (f) at (6,1) {f}; \node (g) at (10,4) {g}; \node (h) at (0,4) {h}; \path (a) edge node {1} (b); % \path (a) edge node {4} (c); % \path (a) edge node {6} (d); % \path (a) edge node {5} (h); \path (b) edge node {3} (c); \path (b) edge node {4} (e); % \path (b) edge node {7} (g); \path (c) edge node {1} (d); % \path (d) edge node {9} (e); % \path (d) edge node {6} (f); \path (d) edge node {2} (g); \path (d) edge node {0} (h); \path (e) edge node {5} (f); % \path (e) edge node {5} (g); % \path (g) edge node {8} (h); % \path (h) edge (h); \end{tikzpicture} \end{center} Minimales Kantengewicht: 16 \end{bAntwort} %% % b) %% \item Welche Worst-Case-Laufzeitkomplexität hat der Algorithmus von Prim, wenn die grauen Knoten in einem Heap (= Halde) 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}(n \cdot \log(n) + m)$ \end{bAntwort} %% % c) %% \item Zeigen Sie durch ein kleines Beispiel, dass ein minimaler Spannbaum eines ungerichteten Graphen nicht immer eindeutig ist. \begin{bGraphenFormat} a: 0 0 b: 2 2 c: 4 0 a -- b: 1 b -- c: 1 a -- c: 1 \end{bGraphenFormat} \begin{bAntwort} \begin{tikzpicture}[li graph] \node (a) at (0,0) {a}; \node (b) at (1,1) {b}; \node (c) at (2,0) {c}; \path (a) edge node {1} (b); \path (a) edge node {1} (c); \path (b) edge node {1} (c); \end{tikzpicture} \hspace{0.5cm} \begin{tikzpicture}[li graph] \node (a) at (0,0) {a}; \node (b) at (1,1) {b}; \node (c) at (2,0) {c}; \path (a) edge node {1} (b); \path (a) edge node {1} (c); \end{tikzpicture} \hspace{0.5cm} \begin{tikzpicture}[li graph] \node (a) at (0,0) {a}; \node (b) at (1,1) {b}; \node (c) at (2,0) {c}; \path (a) edge node {1} (b); \path (b) edge node {1} (c); \end{tikzpicture} \end{bAntwort} %% % d) %% \item Skizzieren Sie eine Methode, mit der ein maximaler Spannbaum mit einem beliebigen Algorithmus für minimale Spannbäume berechnet werden kann. In welcher Laufzeitkomplexität kann ein maximaler Spannbaum berechnet werden? \begin{bAntwort} Alle Kantengewichte negieren. In $\mathcal{O}(n \cdot \log(n) + m)$ wie der Algorithmus von Prim. \end{bAntwort} \end{enumerate} \end{document}