\documentclass{bschlangaul-aufgabe} \bLadePakete{graph} \begin{document} \bAufgabenMetadaten{ Titel = {Aufgabe 4}, Thematik = {Graph a-i}, Referenz = 46115-2021-F.T2-TA2-A4, RelativerPfad = Examen/46115/2021/03/Thema-2/Teilaufgabe-2/Aufgabe-4.tex, ZitatSchluessel = examen:46115:2021:03, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Algorithmus von Dijkstra}, EinzelpruefungsNr = 46115, Jahr = 2021, Monat = 03, ThemaNr = 2, TeilaufgabeNr = 2, AufgabeNr = 4, } \begin{enumerate} %% % a) %% \item Berechnen Sie im gegebenen gerichteten und gewichteten Graph $G = (V,E,w)$ mit Kantenlängen $w : E \rightarrow \mathbb{R}_0^+$ mittels des Dijkstra-Algorithmus die kürzesten (gerichteten) Pfade ausgehend vom Startknoten $a$. \begin{bGraphenFormat} a: 0 0 b: -2 0 c: 2 0 d: 2 1 e: -2 1 f: -1 1 g: 0 1 h: 1 1 i: 1 0 a -> c: 6 a -> f: 1 a -> g: 5 a -> h: 2 b -> a: 0 c -> b: 9 c -> d: 6 d -> h: 0 e -> b: 4 f -> b: 6 f -> e: 2 f -> g: 3 g -> d: 8 g -> h: 6 h -> c: 3 i -> a: 1 i -> c: 0 \end{bGraphenFormat} \begin{center} \begin{tikzpicture}[li graph,x=2cm,y=2cm] \node (a) at (0,0) {a}; \node (b) at (-2,0) {b}; \node (c) at (2,0) {c}; \node (d) at (2,1) {d}; \node (e) at (-2,1) {e}; \node (f) at (-1,1) {f}; \node (g) at (0,1) {g}; \node (h) at (1,1) {h}; \node (i) at (1,0) {i}; \path[->] (a) edge node {1} (f); \path[->] (a) edge node {2} (h); \path[->] (a) edge node {5} (g); \path[->] (a) edge[bend right=60] node {6} (c); \path[->] (b) edge node {0} (a); \path[->] (c) edge node {6} (d); \path[->] (c) edge[bend left=60] node {9} (b); \path[->] (d) edge node {0} (h); \path[->] (e) edge node {4} (b); \path[->] (f) edge node {2} (e); \path[->] (f) edge node {3} (g); \path[->] (f) edge node {6} (b); \path[->] (g) edge node {6} (h); \path[->] (g) edge[bend left=60] node {8} (d); \path[->] (h) edge node {3} (c); \path[->] (i) edge node {0} (c); \path[->] (i) edge node {1} (a); \end{tikzpicture} \end{center} Knoten, deren Entfernung von $a$ bereits feststeht, seien als schwarz bezeichnet und Knoten, bei denen lediglich eine obere Schranke $\neq \infty$ für ihre Entfernung von $a$ bekannt ist, seien als \emph{grau} bezeichnet.\index{Algorithmus von Dijkstra} \footcite{examen:46115:2021:03} \begin{enumerate} %% % i) %% \item Geben Sie als Lösung eine Tabelle an. Fügen Sie jedes mal, wenn der Algorithmus einen Knoten schwarz färbt, eine Zeile zu der Tabelle hinzu. Die Tabelle soll dabei zwei Spalten beinhalten: die linke Spalte zur Angabe des aktuell schwarz gewordenen Knotens und die rechte Spalte mit der bereits aktualisierten Menge grauer Knoten. Jeder Tabelleneintrag soll anstelle des nackten Knotennamens $v$ ein Tripel $(v, v.d, v.\pi)$ sein. Dabei steht $v.d$ für die aktuell bekannte kürzeste Distanz zwischen $a$ und $v$. $v.\pi$ ist der direkte Vorgänger von $v$ auf dem zugehörigen kürzesten Weg von $a$. \begin{bAntwort} \begin{tabular}{lllllllllll} \bf{Nr.} & \bf{besucht} & \bf{a} & \bf{b} & \bf{c} & \bf{d} & \bf{e} & \bf{f} & \bf{g} & \bf{h} & \bf{i} \\ \hline 0 & & 0 & $\infty$ & $\infty$ & $\infty$ & $\infty$ & $\infty$ & $\infty$ & $\infty$ & $\infty$ \\ 1 & a & \bf{0} & $\infty$ & 6 & $\infty$ & $\infty$ & 1 & 5 & 2 & $\infty$ \\ 2 & f & | & 7 & 6 & $\infty$ & 3 & \bf{1} & 4 & 2 & $\infty$ \\ 3 & h & | & 7 & 5 & $\infty$ & 3 & | & 4 & \bf{2} & $\infty$ \\ 4 & e & | & 7 & 5 & $\infty$ & \bf{3} & | & 4 & | & $\infty$ \\ 5 & g & | & 7 & 5 & 12 & | & | & \bf{4} & | & $\infty$ \\ 6 & c & | & 7 & \bf{5} & 11 & | & | & | & | & $\infty$ \\ 7 & b & | & \bf{7} & | & 11 & | & | & | & | & $\infty$ \\ 8 & d & | & | & | & \bf{11} & | & | & | & | & $\infty$ \\ 9 & i & | & | & | & | & | & | & | & | & $\infty$ \\ \end{tabular} \begin{tabular}{llll} \bf{nach} & \bf{Entfernung} & \bf{Reihenfolge} & \bf{Pfad} \\ \hline a $\rightarrow$ a & 0 & 1 & \\ a $\rightarrow$ b & 7 & 7 & a $\rightarrow$ f $\rightarrow$ b \\ a $\rightarrow$ c & 5 & 6 & a $\rightarrow$ h $\rightarrow$ c \\ a $\rightarrow$ d & 11 & 8 & a $\rightarrow$ h $\rightarrow$ c $\rightarrow$ d \\ a $\rightarrow$ e & 3 & 4 & a $\rightarrow$ f $\rightarrow$ e \\ a $\rightarrow$ f & 1 & 2 & a $\rightarrow$ f \\ a $\rightarrow$ g & 4 & 5 & a $\rightarrow$ f $\rightarrow$ g \\ a $\rightarrow$ h & 2 & 3 & a $\rightarrow$ h \\ a $\rightarrow$ i & 2.147483647E9 & 9 & a $\rightarrow$ i \\ \end{tabular} \end{bAntwort} %% % ii) %% \item Zeichnen Sie zudem den entstandenen Kürzeste-Pfade-Baum. \end{enumerate} %% % b) %% \item Warum berechnet der Dijkstra-Algorithmus auf einem gerichteten Eingabegraphen mit potentiell auch negativen Kantengewichten $w : E \rightarrow \mathbb{R}$ nicht immer einen korrekten Kürzesten-Wege-Baum von einem gewählten Startknoten aus? Geben Sie ein Beispiel an, für das der Algorithmus die falsche Antwort liefert. %% % c) %% \item Begründen Sie, warum das Problem nicht gelöst werden kann, indem der Betrag des niedrigsten (also des betragsmäßig größten negativen) Kantengewichts im Graphen zu allen Kanten addiert wird. \end{enumerate} \end{document}