Fix documentclass
This commit is contained in:
parent
3c93339506
commit
2873ddf123
12 changed files with 1645 additions and 155 deletions
17
übung_2/agt_übung_2.aux
Normal file
17
übung_2/agt_übung_2.aux
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
\relax
|
||||
\providecommand*\new@tpo@label[2]{}
|
||||
\providecommand \babel@aux [2]{\global \let \babel@toc \@gobbletwo }
|
||||
\@nameuse{bbl@beforestart}
|
||||
\catcode `"\active
|
||||
\providecommand\hyper@newdestlabel[2]{}
|
||||
\providecommand\HyField@AuxAddToFields[1]{}
|
||||
\providecommand\HyField@AuxAddToCoFields[2]{}
|
||||
\providecommand\BKM@entry[2]{}
|
||||
\BKM@entry{id=1,dest={73656374696F6E2E31},srcline={1},srcfile={2E2F617566676162655F312E746578}}{5C3337365C3337375C3030304B5C3030306C5C303030655C303030695C3030306E5C303030735C303030745C303030655C3030305C3034305C3030304B5C3030306E5C3030306F5C303030745C303030655C3030306E5C3030305C3337345C303030625C303030655C303030725C303030645C303030655C303030635C3030306B5C303030755C3030306E5C30303067}
|
||||
\BKM@entry{id=2,dest={73656374696F6E2E32},srcline={1},srcfile={2E2F617566676162655F322E746578}}{5C3337365C3337375C303030535C303030745C303030725C303030615C3030305C3333375C303030655C3030306E5C303030725C303030655C303030705C303030615C303030725C303030615C303030745C303030755C303030725C3030305C3034305C3030306D5C303030695C303030745C303030745C303030655C3030306C5C303030735C3030305C3034305C3030304C5C303030695C3030306E5C303030655C303030615C303030725C303030655C303030725C3030305C3034305C303030505C303030725C3030306F5C303030675C303030725C303030615C3030306D5C3030306D5C303030695C303030655C303030725C303030755C3030306E5C303030675C3030305C3034305C303030755C3030306E5C303030645C3030305C3034305C303030465C3030306C5C3030305C3337345C303030735C303030735C303030655C3030306E}
|
||||
\BKM@entry{id=3,dest={73656374696F6E2E33},srcline={1},srcfile={2E2F617566676162655F332E746578}}{5C3337365C3337375C303030465C3030306C5C3030305C3337345C303030735C303030735C303030655C3030305C3034305C303030665C303030695C3030306E5C303030645C303030655C3030306E}
|
||||
\babel@aux{ngerman}{}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {1}Kleinste Knotenüberdeckung}{1}{section.1}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {2}Straßenreparatur mittels Linearer Programmierung und Flüssen}{1}{section.2}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3}Flüsse finden}{1}{section.3}\protected@file@percent }
|
||||
\gdef \@abspage@last{1}
|
||||
1398
übung_2/agt_übung_2.log
Normal file
1398
übung_2/agt_übung_2.log
Normal file
File diff suppressed because it is too large
Load diff
BIN
übung_2/agt_übung_2.pdf
Normal file
BIN
übung_2/agt_übung_2.pdf
Normal file
Binary file not shown.
BIN
übung_2/agt_übung_2.synctex.gz
Normal file
BIN
übung_2/agt_übung_2.synctex.gz
Normal file
Binary file not shown.
|
|
@ -1,5 +1,4 @@
|
|||
\documentclass{../ngexrcs}
|
||||
\usepackage{../ngutils}
|
||||
\documentclass{ngexrcs}
|
||||
\usepackage{hyperref}
|
||||
\setkeys{Gin}{pagebox=artbox, width=0.2\textwidth}
|
||||
|
||||
|
|
@ -14,6 +13,5 @@
|
|||
\input{aufgabe_1.tex}
|
||||
\input{aufgabe_2.tex}
|
||||
\input{aufgabe_3.tex}
|
||||
\input{aufgabe_4.tex}
|
||||
|
||||
\end{document}
|
||||
|
|
|
|||
|
|
@ -1,47 +1 @@
|
|||
\section{Spannbäume \& Breitensuche}
|
||||
Sei $G = \tup{V, E}$ ein zusammenhängender Graph mit Kantengewichten $w: E \to \NN$
|
||||
und $s \in V$ ein ausgezeichneter Knoten.
|
||||
|
||||
\begin{tasks}
|
||||
|
||||
\item
|
||||
\begin{quote}
|
||||
Wenn $w(e) = 1$ für alle $e \in E$, dann ist der Breitensuchbaum mit
|
||||
Quelle $s$ ein minimaler Spannbaum.
|
||||
\end{quote}
|
||||
Die Breitensuche berechnet in diesem
|
||||
Fall den kürzesten Weg von jedem Knoten zum Knoten $s$, also den
|
||||
Breitensuchbaum. Dieser spannt also einen minimalen Spannbaum auf.
|
||||
\points{2}
|
||||
|
||||
\item
|
||||
\begin{quote}
|
||||
Wenn $w(e) = 1$ für alle $e \in E$, dann ist jeder minimale Spannbaum
|
||||
von $G$ ein Breitensuchbaum mit Quelle $s$.
|
||||
\end{quote}
|
||||
Falsch, siehe \autoref{fig:msb}.
|
||||
\points{2}
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\includegraphics[page=1]{figures.pdf}
|
||||
\caption{$\pi$-Zeiger des Breitensuchbaums und MSB blau hinterlegt.}
|
||||
\label{fig:msb}
|
||||
\end{figure}
|
||||
|
||||
\item
|
||||
\begin{quote}
|
||||
Wenn $w(e) \in \set{1, 2, 3}$ für alle $e \in E$, dann ist jeder minimale
|
||||
Spannbaum von $G$ ein Tiefensuchbaum mit Quelle $s$.
|
||||
\end{quote}
|
||||
Falsch, siehe \autoref{fig:dfs}. Der Minimale Spannbaum kann kein Tiefensuchbaum
|
||||
sein.
|
||||
\points{2}
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\includegraphics[page=2]{figures}
|
||||
\caption{Tiefensuchbaum in orange und MSB blau hinterlegt.}
|
||||
\label{fig:dfs}
|
||||
\end{figure}
|
||||
|
||||
\end{tasks}
|
||||
|
||||
\section{Kleinste Knotenüberdeckung}
|
||||
|
|
@ -1,78 +1 @@
|
|||
\section{Kreissuche}
|
||||
\begin{tasks}
|
||||
\item
|
||||
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$
|
||||
|
||||
Wiederhole den Schritt solange bis $Q$ leer ist.
|
||||
|
||||
% \begin{pseudocode}[caption=Hello World Algorithmische]
|
||||
% EinfacherKreis(|Graph| $G$, |Vertex| $s$)
|
||||
% Initialize($G$, $s$)
|
||||
% $Q \gets$ new Queue
|
||||
% $Q.$Enqueue($s$)
|
||||
% $t_1 \gets nil$
|
||||
% $t_2 \gets s$
|
||||
% // Comment
|
||||
% while $Q \neq \emptyset$ do
|
||||
% $u \gets Q.$Dequeue
|
||||
% $t_1 \gets t_2$
|
||||
% $t_2 \gets u$
|
||||
% foreach $v \in Adj[u]$ do
|
||||
% if $v.color = white$ then
|
||||
% $Q.$Enqueue($v$)
|
||||
% $u.color \gets black$
|
||||
% if $t_1 = t_2$ then
|
||||
% return $true$
|
||||
% 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}
|
||||
\points{4}
|
||||
|
||||
\item
|
||||
Dadurch, dass wir nur Knoten
|
||||
einfügen, die noch nicht entdeckt wurden, können wir nie auf dem selben Pfad
|
||||
zu einem Knoten kommen. Das heißt, wenn wir einen schon entdeckten Knoten
|
||||
finden, haben wir einen Kreis im Graphen gefunden.
|
||||
|
||||
Der Algorithmus kann aufgrund der Struktur des Graphens (kein Multigraph,
|
||||
keine Selbstkanten) nur Kreise der Länge mindestens 3 finden.
|
||||
|
||||
Jeder Knoten wird nur einmal in die Queue eingefügt und nur einmal herausgenommen.
|
||||
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
|
||||
für diese Zusammenhangskomponente. Als Ausgabe geben wir ein Array von
|
||||
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{Straßenreparatur mittels Linearer Programmierung und Flüssen}
|
||||
|
|
@ -1,26 +1 @@
|
|||
\section{Eulerwege}
|
||||
\begin{quote}
|
||||
Sei $G = \tup{V, E}$ ein ungerichteter, zusammenhängender Graph. Dann gilt: $G$ hat genau
|
||||
dann einen Eulerweg, wenn die Anzahl an Knoten $v \in V$, für die gilt, dass $deg(v)$
|
||||
ungerade ist, genau $0$ oder $2$ ist.
|
||||
\end{quote}
|
||||
|
||||
\begin{itemize}
|
||||
\item[$\seilpmi$]
|
||||
1. Fall: $0$ Knoten mit ungeradem Grad. Nach dem Satz in der Vorlesung
|
||||
gibt es einen Eulerkreis. Im Eulerweg sind also Start- und Endknoten
|
||||
identisch.
|
||||
|
||||
2. Fall: $2$ Knoten mit ungeradem Grad. Die beiden Knoten bilden den Start-
|
||||
und Endknoten des Eulerwegs. Die Kante die den Eulerkreis schließen würde
|
||||
braucht genau zwei Knoten, zu denen sie inzident ist. Nehmen wir diese Kante
|
||||
weg, ergibt sich eine ungerader Grad an diesen beiden Knoten.
|
||||
\item[$\implies$]
|
||||
Ein Graph mit ungerader Anzahl an Knoten mit ungeradem Grad kann nicht
|
||||
existieren, da die Summe aller Knoten mit ungeradem Grad gerade 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{Flüsse finden}
|
||||
75
übung_2/ngexrcs.cls
Normal file
75
übung_2/ngexrcs.cls
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
% vim: set filetype:tex
|
||||
|
||||
% Identification %
|
||||
\NeedsTeXFormat{LaTeX2e}
|
||||
\ProvidesClass{ngexrcs}[2021/12/21 ADS Exercise class]
|
||||
|
||||
% Handle options %
|
||||
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}}
|
||||
\ProcessOptions\relax
|
||||
|
||||
% More declarations %
|
||||
\LoadClass{scrartcl}
|
||||
|
||||
\KOMAoptions{mpinclude=true}
|
||||
\recalctypearea
|
||||
|
||||
\RequirePackage{enumitem}
|
||||
\RequirePackage{ngutils}
|
||||
|
||||
% define fonts
|
||||
\RequirePackage{fontspec}
|
||||
%\RequirePackage{tgpagella}
|
||||
%\RequirePackage{tgheros}
|
||||
%\RequirePackage{euler-math}
|
||||
\RequirePackage[math-style=upright]{unicode-math}
|
||||
\setmainfont{TeX Gyre Pagella}
|
||||
\setsansfont{TeX Gyre Heros}
|
||||
\setmonofont{TeX Gyre Cursor}
|
||||
\setmathfont{Euler Math}
|
||||
|
||||
\setlength{\marginparwidth}{1.5\marginparwidth}
|
||||
\setlength{\fboxrule}{\heavyrulewidth}
|
||||
|
||||
|
||||
%
|
||||
% \renewcommand\theenumi{\@alph\c@enumi}
|
||||
% \renewcommand\theenumii{\@arabic\c@enumii}
|
||||
%\renewcommand\theenumiii{\@roman\c@enumiii}
|
||||
%\renewcommand\theenumiv{\@Alph\c@enumiv}
|
||||
|
||||
% \renewcommand\labelenumi{\theenumi)}
|
||||
% \renewcommand\labelenumii{\theenumii.}
|
||||
%\renewcommand\labelenumiii{\theenumiii.}
|
||||
%\renewcommand\labelenumiv{\theenumiv.}
|
||||
|
||||
% Use sansfont for all title elements
|
||||
\addtokomafont{titlehead}{\sffamily}
|
||||
\addtokomafont{subject}{\normalfont \sffamily \itshape}
|
||||
\addtokomafont{title}{\sffamily}
|
||||
\addtokomafont{subtitle}{\sffamily}
|
||||
\addtokomafont{author}{\sffamily}
|
||||
\addtokomafont{date}{\sffamily}
|
||||
\addtokomafont{publishers}{\sffamily}
|
||||
|
||||
% Use serif font for headings
|
||||
\addtokomafont{disposition}{\rmfamily}
|
||||
|
||||
% Let sections be formated as in: Aufgabe 1 -- Section title
|
||||
\renewcommand*{\sectionformat}{Aufgabe \thesection\autodot\enskip--\enskip}
|
||||
|
||||
% Let points of an exercise be printed as in: [__ / 2]
|
||||
\newkomafont{points}{\sffamily}
|
||||
\newcommand\points[2][\quad]{\marginline{\framebox{{\usekomafont{points}#1 \textbf{/} #2}}}}
|
||||
|
||||
\newenvironment{tasks}[1][1em]
|
||||
{
|
||||
\setlist{leftmargin=*}
|
||||
\renewcommand\theenumi{\@alph\c@enumi}
|
||||
\renewcommand\theenumii{\@arabic\c@enumii}
|
||||
\renewcommand\labelenumi{\theenumi)}
|
||||
\renewcommand\labelenumii{\theenumii.}
|
||||
\begin{enumerate}
|
||||
}{%
|
||||
\end{enumerate}
|
||||
}
|
||||
150
übung_2/ngutils.sty
Normal file
150
übung_2/ngutils.sty
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
\NeedsTeXFormat{LaTeX2e}
|
||||
\ProvidesPackage{ngutils}[2025/12/24 Never's LaTeX utils]
|
||||
|
||||
\RequirePackage[ngerman]{babel}
|
||||
\RequirePackage{graphicx}
|
||||
\RequirePackage{tabularx}
|
||||
\RequirePackage{booktabs}
|
||||
\RequirePackage{listings}
|
||||
|
||||
|
||||
\lstnewenvironment{pseudocode}[1][] %defines the algorithm listing environment
|
||||
{
|
||||
\renewcommand{\lstlistingname}{Algorithmus}
|
||||
\lstset{ %this is the stype
|
||||
mathescape=true,
|
||||
columns=fullflexible,
|
||||
basicstyle=\normalfont,
|
||||
identifierstyle=\scshape,
|
||||
keywordstyle=\bfseries,
|
||||
keywords={, new, if, then, else, while, for, in, to, up, down, foreach, do, return},
|
||||
commentstyle=\itshape,
|
||||
comment=[l]//,
|
||||
delim=[is][\normalfont]{|}{|},
|
||||
tabsize=3,
|
||||
frame=tb,
|
||||
framerule=1pt,
|
||||
#1 % this is to add specific settings to an usage of this environment (for instnce, the caption and referable label)
|
||||
}
|
||||
}
|
||||
{}
|
||||
|
||||
\newcommand{\seilpmi}{\ensuremath{\Longleftarrow}}
|
||||
|
||||
\newcommand\NN{\ensuremath{\mathbb{N}}}
|
||||
\newcommand\ZZ{\ensuremath{\mathbb{Z}}}
|
||||
\newcommand\QQ{\ensuremath{\mathbb{Q}}}
|
||||
\newcommand\RR{\ensuremath{\mathbb{R}}}
|
||||
\newcommand\CC{\ensuremath{\mathbb{C}}}
|
||||
\newcommand\PP{\ensuremath{\mathbb{P}}}
|
||||
|
||||
\newcommand\Oh{\ensuremath{\mathcal{O}}}
|
||||
\newcommand\oh{\ensuremath{\scriptstyle{\mathcal{O}}}}
|
||||
\newcommand\Eh{\ensuremath{\mathrm{E}}}
|
||||
\newcommand\Var{\ensuremath{\mathrm{Var}}}
|
||||
|
||||
\newcommand\parens[1]{\ensuremath{\left(#1\right)}}
|
||||
\newcommand\brackets[1]{\ensuremath{\left[#1\right]}}
|
||||
\newcommand\braces[1]{\ensuremath{\left\{#1\right\}}}
|
||||
\newcommand\angled[1]{\ensuremath{\left\langle#1\right\rangle}}
|
||||
|
||||
\newcommand\tup[1]{\parens{#1}}
|
||||
\newcommand\ivl[1]{\brackets{#1}}
|
||||
\newcommand\set[1]{\braces{#1}}
|
||||
\newcommand\arr[1]{\angled{#1}}
|
||||
\newcommand\abs[1]{\ensuremath{\lvert#1\rvert}}
|
||||
\newcommand\norm[1]{\ensuremath{\lVert#1\rVert}}
|
||||
\newcommand\ceil[1]{\ensuremath{\lceil#1\rceil}}
|
||||
\newcommand\floor[1]{\ensuremath{\lfloor#1\rfloor}}
|
||||
|
||||
\newcommand\alg[2]{{\normalfont\scshape#1}{\normalfont(#2)}}
|
||||
\newcommand\algt[1]{{\normalfont\scshape#1}}
|
||||
\newcommand\com[1]{{\normalfont\itshape/\!\!/ #1}}
|
||||
|
||||
\newenvironment{algorithmic}[1][1em]{
|
||||
\begin{minipage}[t]{\dimexpr\linewidth}
|
||||
\bfseries
|
||||
\begin{tabbing}
|
||||
\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\kill
|
||||
}{%
|
||||
\end{tabbing}
|
||||
\end{minipage}
|
||||
}
|
||||
|
||||
% \newenvironment{algorithm}[1][1em]{
|
||||
% \begin{center}
|
||||
% \begin{minipage}[t]{\dimexpr\linewidth}
|
||||
% \bfseries
|
||||
% \begin{tabbing}
|
||||
% \hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\hspace{#1}\=\kill
|
||||
% }{%
|
||||
% \end{tabbing}
|
||||
% \end{minipage}
|
||||
% \end{center}
|
||||
% }
|
||||
|
||||
\makeatletter
|
||||
\newcounter{algorithm}% the counter
|
||||
\renewcommand*\thealgorithm{\arabic{algorithm}}% the default format for the counter
|
||||
\newcommand*\fps@algorithm{tbp}% default floating options
|
||||
\newcommand*\ftype@algorithm{4}% float type number, needs to be a power of 2; % \ftype@figure=1, \ftype@table=2
|
||||
\newcommand*\ext@algorithm{loa}% extension of file for the list of schemes
|
||||
\newcommand*\fnum@algorithm{\algorithmname\nobreakspace\thealgorithm}% used in caption
|
||||
\newcommand*\algorithmname{Algorithmus}% the name
|
||||
\newcommand*\listalgorithmname{Algorithmenverzeichnis}% the name of the list
|
||||
\newenvironment{algorithm}{\@float{algorithm}}{\end@float}% the environment
|
||||
\newenvironment{algorithm*}{\@dblfloat{algorithm}}{\end@dblfloat}% the starred % version for twocolumn documents
|
||||
\newcommand*\listofalgorithms{% the list of schemes
|
||||
\section*{\listalgorithmname}
|
||||
\@mkboth
|
||||
{\MakeUppercase\listalgorithmname}
|
||||
{\MakeUppercase\listalgorithmname}
|
||||
\@starttoc{\ext@algorithm} }
|
||||
\let\l@algorithm\l@figure % layout of list is the same as for figures
|
||||
\makeatother
|
||||
|
||||
\newlength{\theoremskip}
|
||||
\setlength{\theoremskip}{6em}
|
||||
|
||||
\newcommand{\theoremfont}{\normalfont\bfseries}
|
||||
\newcommand{\definitionfont}{\normalfont\bfseries}
|
||||
|
||||
\newenvironment{theoremic}[2][\theoremfont]{
|
||||
{#1 #2}
|
||||
\hfill
|
||||
\begin{minipage}[t]{\the\dimexpr\linewidth-\theoremskip\relax}
|
||||
}{
|
||||
\end{minipage}
|
||||
}
|
||||
|
||||
\newenvironment{theorem}{
|
||||
\begin{theoremic}{Satz.}
|
||||
}{
|
||||
\end{theoremic}
|
||||
}
|
||||
|
||||
\newenvironment{lemma}{
|
||||
\begin{theoremic}{Lemma.}
|
||||
}{
|
||||
\end{theoremic}
|
||||
}
|
||||
|
||||
\newenvironment{proof}{
|
||||
\begin{theoremic}{Beweis.}
|
||||
}{
|
||||
\end{theoremic}
|
||||
}
|
||||
|
||||
\newenvironment{definition}{
|
||||
\begin{theoremic}[\definitionfont]{Definition.}
|
||||
}{
|
||||
\end{theoremic}
|
||||
}
|
||||
|
||||
\newenvironment{example}{
|
||||
\begin{theoremic}[\definitionfont]{Beispiel.}
|
||||
}{
|
||||
\end{theoremic}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue