\documentclass[10pt,a4paper,oneside,ngerman,numbers=noenddot]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{bytefield}
\usepackage{paralist}
\usepackage{gauss}
\usepackage{pgfplots}
\usepackage{textcomp}
\usepackage[locale=DE,exponent-product=\cdot,detect-all]{siunitx}
\usepackage{tikz}
\usepackage{algpseudocode}
\usepackage{algorithm}
%\usepackage{algorithmic}
%\usepackage{minted}
\usetikzlibrary{automata,matrix,fadings,calc,positioning,decorations.pathreplacing,arrows,decorations.markings}
\usepackage{polynom}
\polyset{style=C, div=:,vars=x}
\pgfplotsset{compat=1.8}
\pagenumbering{arabic}
\def\thesection{\arabic{section})}
\def\thesubsection{(\alph{subsection})}
\def\thesubsubsection{(\roman{subsubsection})}
\makeatletter
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{%
  \hskip -\arraycolsep
  \let\@ifnextchar\new@ifnextchar
  \array{#1}}
\makeatother
\parskip 12pt plus 1pt minus 1pt
\parindent 0pt

\begin{document}
\author{Reinhard Köhler (6425686), Tronje Krabbe (6435002), \\
Jim Martens (6420323)}
\title{Hausaufgaben zum 15. Januar}
\subtitle{Gruppe 8}
\maketitle

\section{} %1
	\subsection{} %a
		\begin{tabular}{c|c|c|c|c|c|c|c|c}
			EXTRACT & 1 & 2 & 3 & 4 & 5 & 6 & 7 &\\
			\hline
			- & 0 & $\infty$ & $\infty$ & $\infty$ & $\infty$ & $\infty$ & $\infty$ & (v.dist) \\
			& - & - & - & - & - & - & - & (v.$\pi$) \\
			\hline
			1 & 0 & 4 & $\infty$ & $\infty$ & $\infty$ & 5 & $\infty$ & \\
			& - & 1 & - & - & - & 1 & - & \\
			\hline
			2 & 0 & 4 & 14 & $\infty$ & $\infty$ & 5 & 7 & \\
			& - & 1 & 2 & - & - & 1 & 2 & \\
			\hline
			6 & 0 & 4 & 14 & $\infty$ & 14 & 5 & 7 & \\
			& - & 1 & 2 & - & 6 & 1 & 2 & \\
			\hline
			7 & 0 & 4 & 13 & $\infty$ & 10 & 5 & 7 & \\
			& - & 1 & 7 & - & 7 & 1 & 2 & \\
			\hline
			5 & 0 & 4 & 12 & 15 & 10 & 5 & 7 & \\
			& - & 1 & 5 & 5 & 7 & 1 & 2 & \\
			\hline
			3 & 0 & 4 & 12 & 14 & 10 & 5 & 7 & \\
			& - & 1 & 5 & 3 & 7 & 1 & 2 & \\
			\hline
			4 & 0 & 4 & 12 & 14 & 10 & 5 & 7 & \\
			& - & 1 & 5 & 3 & 7 & 1 & 2 & 
		\end{tabular}
		
		Der kürzeste Pfad von 1 nach 4 verläuft über 2, 7, 5 und 3 nach 4. Insgesamt kostet der Pfad 14.
	\subsection{} %b
		In $G_{2}$ ist 3 die Quelle. 
		
		\begin{tabular}{c|c|c|c|c|c|c|c|c}
			EXTRACT & 3 & 1 & 2 & 4 & 5 &\\
			\hline
			- & 0 & $\infty$ & $\infty$ & $\infty$ & $\infty$ & (v.dist) \\
			& - & - & - & - & - & (v.$\pi$) \\
			\hline
			3 & 0 & $\infty$ & 9 & 4 & $\infty$ & \\
			& - & - & 3 & 3 & - & \\
			\hline
			4 & 0 & 5 & 8 & 4 & 6 & \\
			& - & 4 & 4 & 3 & 4 & \\
			\hline
			1 & 0 & 5 & 8 & 4 & 6 & \\
			& - & 4 & 4 & 3 & 4 & \\
			\hline
			5 & 0 & 1 & 8 & 4 & 6 & \\
			& - & 5 & 4 & 3 & 4 & \\
		\end{tabular}
		
		Durch die negative Kante von 5 nach 1, würde sich der kürzeste Pfad von 1 von 5 auf 1 ändern, was jedoch nicht geht, da 1 bereits besucht wurde. Daher liefert Dijkstra für das Single-Source-Shortest-Path Problem in $G_{2}$ ein falsches Ergebnis.
\section{} %2
	\begin{algorithm}
		\caption{Relax}
		\begin{algorithmic}[1]
			\Procedure{Relax}{$u,v$}
				\State $maxWeight \gets max(u.maxWeight, w(u,v))$
				\If{$maxWeight < v.maxWeight$}
					\State $v.maxWeight \gets w(u,v)$
					\State $v.\pi \gets u$
				\EndIf
			\EndProcedure
		\end{algorithmic}
	\end{algorithm}
	
	\begin{algorithm}
		\caption{Initialize single source}
		\begin{algorithmic}[1]
			\Procedure{InitializeSingleSource}{$G,s$}
				\ForAll{$v \in V$}
					\State $v.maxWeight \gets \infty$
					\State $v.\pi \gets NIL$
				\EndFor
				\State $s.maxWeight \gets 0$
			\EndProcedure
		\end{algorithmic}
	\end{algorithm}

	\begin{algorithm}
  		\caption{Dijkstra für leichtest mögliche schwerste Kanten}
		\begin{algorithmic}[1]
			\Procedure{Dijkstra}{$G,w,s$}
				\State $\Call{InitializeSingleSource}{G,s}$
				\State $Q \gets (V, V.maxWeight)$\Comment{ordered by the maximum weight (edge with highest weight) per path in ascending order}
				\While{$Q \neq \emptyset$}
					\State $u \gets \Call{Extract}{Q}$
					\ForAll{v adjacent to u}
		            	\State $\Call{Relax}{u,v}$ and update the keys in Q accordingly
					\EndFor
				\EndWhile
			\EndProcedure
		\end{algorithmic}
	\end{algorithm}
\section{} %3
	\subsection{} %a
		Es sei $B(k)$ die in der Aufgabenstellung formulierte Behauptung in Abhängigkeit von $k$.

	    \textbf{Behauptung}\\ $B(k)$ gilt für alle $k \in \mathbb{N}_{\geq 0}$.

	    \textbf{Induktionsanfang}\\ Zu Zeigen: Es gilt $B(0)$.

	    $A^0$ ist die Einheitsmatrix $E$. Ein Eintrag in $E$ ist genau dann 1, wenn er auf der Hauptdiagonalen liegt, andernfalls ist er 0.
	    Das bedeutet, dass es über 0 Kanten jeweils genau einen Pfad von einem Knoten $i$ zu einem Knoten $j$ gibt, wenn $i = j$ gilt. Bei 0 Kanten sind
	    dies genau die Pfade, die in einem beliebigen Graphen möglich sind, da ein Weg zu einem anderen Knoten über mindestens eine Kante gehen würde.
	    Die Matrix $A^0$ ist also korrekt und $B(0)$ gilt.

	    \textbf{Induktionsschritt} Wir nehmen an, dass $B(k)$ gilt. Zu zeigen ist, dass daraus $B(k+1)$ folgt.

	    Sei $X$ eine Matrix, die erfüllt, dass jeder Eintrag $X[i,j]$ die Anzahl der verschiedenen Pfade vom Knoten $i$ über $k+1$ Kanten zum Knoten $j$ repräsentiert.
	    Nun ist zu zeigen, dass $X=A^{k+1}$ gilt.

	    Wir betrachten nun einen beliebigen Eintrag $L[i,j]$. Um einen solchen Eintrag zu berechnen, summieren wir zunächst die Anzahlen aller Möglichkeiten,
	    über $k$ Kanten vom Knoten $i$ zu einem beliebigen Knoten $h$ zu gelangen. Laut Induktionsannahme finden wir genau diese in der Matrix $A$,
	    im Eintrag $A^k[i,h]$. Die Summe aller dieser Möglichkeiten ist wie folgt definiert:

	    $$\sum_{h=1}^{n}{A^k[i,h]}$$

	    Jetzt wollen wir eine Möglichkeit nur betrachten, wenn eine Kante $(h,j)$ existiert.
	    Also betrachten wir nur noch die Möglichkeiten, über $k+1$ Kanten vom Knoten $i$ zum Knoten $j$ zu gelangen. Wir definieren das $n$-Tupel $Z$:

	    $$ Z=(z_0, z_1, \cdots, z_n), z_h = \left\{
	    \begin{array}{l}
	        1: (h,j) \in G \\
	        0: (h,j) \notin G
	    \end{array}\right.$$

	    Wir definieren nun die Einträge der Matrix $X$, in denen jeweils alle korrekten Möglichkeiten aufsummiert werden:

	    $$\sum_{h=1}^{n}{A^k[i,h] \cdot z_h} $$

	    Nun entspricht ein Eintrag der Adjazenzmatrix $A$ an der Stelle $A[h,j]$ laut ihrer Definition genau dem Eintrag $z_h$ in dem $j$ zugehörigen Tupel $Z$.
	    Wir können also genauso schreiben:

	    $$ \sum_{h=1}^{n}{A^k[i,h] \cdot A[h,j]}$$

	    Dies ist nach der Definition der Matrixmultiplikation äquivalent mit:

	    $$ X = A^k \cdot A = A^{k+1} $$

	    Es wurde also gezeigt, dass $X = A^{k+1}$ gilt, und somit jede Matrix, die unsere Forderungen erfüllt, $A^{k+1}$ sein muss.
	    Demnach gilt $B(k) \Rightarrow B(k+1)$.

	    Damit ist die Induktion abgeschlossen und die Behauptung bewiesen.$\square$
	\subsection{} %b
	\subsection{} %c
\section{} %4
	\subsection{} %a
		Wäre die Last in $W$ aboslut gleich verteilt, hätte natürlich jede Kante die gleiche Last.
		$ \sum_{p \in W} l(p) $ ist die Summe aller Pfadlängen, also die Anzahl aller verwendeten Kanten.
		Diese Anzahl wird in einem optimierten Pfadsystem gleichmäßig verteilt, also ergibt sich
		$ \frac{1}{|E|} \sum_{p \in W} l(p) $ als untere Grenze von $ c(W) $.

		Ist $ W $ jedoch nicht optimal, ist $ c(W) $ natürlich größer. Somit gilt
		$ c(W) \ge \frac{1}{|E|} \sum_{p \in W} l(p) $.
	\newpage
	\subsection{} %b
		$ c(W) $ ist die größte Kantenlast unter Berücksichtigung aller Kanten in allen Pfaden in $N$. $ c(W^*) $ ist die größte Kantenlast
		unter Berücksichtigung aller Kanten in allen kürzesten Pfaden in $N$. Dies bedeutet, dass $ c(W) $ die absolute Maximalkantenlast ist,
		während $ c(W) $ nicht unbedingt alle Kanten berücksichtigt, deswegen auch nicht unbedingt gleich $ c(W) $ ist.

\end{document}
