Aufgabe 4 fertig
This commit is contained in:
parent
9d19f3cd19
commit
b5eb59096b
6 changed files with 66 additions and 43 deletions
|
|
@ -52,14 +52,14 @@ falsch.
|
|||
\section{Kreissuche}
|
||||
\begin{tasks}
|
||||
\item
|
||||
Wähle Startknoten $s$ und füge ihn in eine neue Queue $Q$ ein.
|
||||
Wähle Startknoten $s$ und füge ihn in eine neue Queue $Q$ ein.
|
||||
|
||||
Nimm den vordersten Knoten $u$ aus $Q$ und füge seine noch nicht entdeckten (weißen)
|
||||
Nachbarn ein und färbe sie grau. Wenn einer der Nachbarn schon entdeckt wurde,
|
||||
also grau ist, gibt es einen Kreis in $G$.
|
||||
Markiere den Knoten $u$ als abgeschlossen ($black$) und entferne ihn aus $Q$
|
||||
Nimm den vordersten Knoten $u$ aus $Q$ und füge seine noch nicht entdeckten (weißen)
|
||||
Nachbarn ein und färbe sie grau. Wenn einer der Nachbarn schon entdeckt wurde,
|
||||
also grau ist, gibt es einen Kreis in $G$.
|
||||
Markiere den Knoten $u$ als abgeschlossen ($black$) und entferne ihn aus $Q$
|
||||
|
||||
Wiederhole den Schritt solange bis $Q$ leer ist.
|
||||
Wiederhole den Schritt solange bis $Q$ leer ist.
|
||||
|
||||
% \begin{pseudocode}[caption=Hello World Algorithmische]
|
||||
% EinfacherKreis(|Graph| $G$, |Vertex| $s$)
|
||||
|
|
@ -82,28 +82,28 @@ Wiederhole den Schritt solange bis $Q$ leer ist.
|
|||
% else
|
||||
% return $false$
|
||||
% \end{pseudocode}
|
||||
|
||||
\begin{algorithm}[h]
|
||||
\centering
|
||||
\begin{algorithmic}
|
||||
\alg{EinfacherKreis}{Graph $G$, Vertex $s$} \+ \\
|
||||
\alg{Initialize}{$G$, $s$} \com{So wie in der Breitensuche} \\
|
||||
$Q \gets$ new \alg{Queue}{} \\
|
||||
$Q.$\alg{Enqueue}{$s$} \\
|
||||
while $Q \neq \emptyset$ do \+ \\
|
||||
$u \gets Q.$\alg{Dequeue}{} \\
|
||||
$u.color \gets gray$ \\
|
||||
foreach $v \in Adj[u]$ do \+ \\
|
||||
\com{Füge alle noch nicht entdeckten Knoten ein} \\
|
||||
if $v.color = white$ then \+ \\
|
||||
$v.color \gets gray$ \\
|
||||
$Q.$\alg{Enqueue}{$v$} \- \\
|
||||
\com{Wenn ein Knoten schon entdeckt wurde, gibt es einen Kreis} \\
|
||||
else return $true$ \- \\
|
||||
$u.color \gets black$ \- \\
|
||||
return $false$
|
||||
\end{algorithmic}
|
||||
\end{algorithm}
|
||||
\begin{algorithm}[h]
|
||||
\centering
|
||||
\begin{algorithmic}
|
||||
\alg{EinfacherKreis}{Graph $G$, Vertex $s$} \+ \\
|
||||
\alg{Initialize}{$G$, $s$} \com{So wie in der Breitensuche} \\
|
||||
$Q \gets$ new \alg{Queue}{} \\
|
||||
$Q.$\alg{Enqueue}{$s$} \\
|
||||
while $Q \neq \emptyset$ do \+ \\
|
||||
$u \gets Q.$\alg{Dequeue}{} \\
|
||||
$u.color \gets gray$ \\
|
||||
foreach $v \in Adj[u]$ do \+ \\
|
||||
\com{Füge alle noch nicht entdeckten Knoten ein} \\
|
||||
if $v.color = white$ then \+ \\
|
||||
$v.color \gets gray$ \\
|
||||
$Q.$\alg{Enqueue}{$v$} \- \\
|
||||
\com{Wenn ein Knoten schon entdeckt wurde, gibt es einen Kreis} \\
|
||||
else return $true$ \- \\
|
||||
$u.color \gets black$ \- \\
|
||||
return $false$
|
||||
\end{algorithmic}
|
||||
\end{algorithm}
|
||||
\points{4}
|
||||
|
||||
\item
|
||||
Dadurch, dass wir nur Knoten
|
||||
|
|
@ -116,6 +116,7 @@ Wiederhole den Schritt solange bis $Q$ leer ist.
|
|||
|
||||
Jeder Knoten wird nur einmal in die Queue eingefügt und nur einmal herasgenommen.
|
||||
Somit läuft der Algorithmus in $\Oh(\abs{V})$.
|
||||
\points{2}
|
||||
|
||||
\item
|
||||
Solange es weiße Knoten im Graphen gibt, wählen wir einen neuen Startknoten
|
||||
|
|
@ -123,6 +124,7 @@ Wiederhole den Schritt solange bis $Q$ leer ist.
|
|||
Tupeln $\tup{s_i, c_i}$ zurück, wobei $s_i$ der Startknoten einer
|
||||
Zusammenhangskomponente und $c_i \in \set{true, false}$ der Wahrheitswert, ob
|
||||
ein Kreis in der Komponente existiert.
|
||||
\points{1}
|
||||
\end{tasks}
|
||||
|
||||
\section{Eulerwege}
|
||||
|
|
@ -148,10 +150,25 @@ ungerade ist, genau $0$ oder $2$ ist.
|
|||
|
||||
Für alle anderen Fälle gilt, wenn ein Knoten ungeraden Grad hat, dann gibt
|
||||
es keinen Weg aus dem Knoten heraus, wenn man hineingelaufen ist.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\points{4}
|
||||
|
||||
\section{Graphmodellierung}
|
||||
\begin{quote}
|
||||
Sie betreuen ein Projekt, das sich aus vielen vordefinierten Aufgaben zusammensetzt.
|
||||
Manche Aufgaben können erst erledigt werden, wenn bestimmte andere Aufgaben ab-
|
||||
geschlossen sind. Für jede Aufgabe ist vorher genau bekannt, von welchen Aufgaben
|
||||
sie abhängt. Ihr Projektteam kann immer nur eine Aufgabe gleichzeitig bearbeiten und
|
||||
eine angefangene Aufgabe wird immer abgeschlossen bevor eine neue Aufgabe begon-
|
||||
nen werden kann.
|
||||
\end{quote}
|
||||
Wir modellieren das Problem als gerichteten Graph.
|
||||
Die Aufgaben sind Knoten. Jede Aufgabe hat Kanten zu den Aufgaben, die von ihr
|
||||
abhängen.
|
||||
|
||||
Eine Reihenfolge können wir Mithilfe einer Topologischen Sortierung finden.
|
||||
|
||||
\points{3}
|
||||
|
||||
|
||||
\end{document}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue