diff --git a/übung_10/agt26-blatt10.pdf b/übung_10/agt26-blatt10.pdf new file mode 100644 index 0000000..0a02d89 Binary files /dev/null and b/übung_10/agt26-blatt10.pdf differ diff --git a/übung_10/agt_übung_10.pdf b/übung_10/agt_übung_10.pdf new file mode 100644 index 0000000..4308b47 Binary files /dev/null and b/übung_10/agt_übung_10.pdf differ diff --git a/übung_10/agt_übung_10.tex b/übung_10/agt_übung_10.tex new file mode 100644 index 0000000..a699d8a --- /dev/null +++ b/übung_10/agt_übung_10.tex @@ -0,0 +1,18 @@ +\documentclass[parskip=half]{ngexrcs} +\usepackage{hyperref} +\usepackage{subcaption} +\setkeys{Gin}{pagebox=artbox, width=0.8\textwidth} + +\subject{Algorithmische Graphentheorie} +\title{10. Übungsblatt} +\author{Jasper Gude \and Pia Röttgers} + +\begin{document} +\maketitle +\points[2em]{20} + +\input{aufgabe_1.tex} +\input{aufgabe_2.tex} +\input{aufgabe_3.tex} + +\end{document} diff --git a/übung_10/aufgabe_1.tex b/übung_10/aufgabe_1.tex new file mode 100644 index 0000000..d8075fe --- /dev/null +++ b/übung_10/aufgabe_1.tex @@ -0,0 +1,51 @@ +\section{Größte Clique} +\begin{tasks} + \item + Wir prüfen für jede Teilmenge $V' \subseteq V$, ob sie eine Clique ist, + d. h. wir prüfen für jeden Knoten in $V'$ ob es eine Kante zu jedem anderen + Knoten in $V'$ gibt. + + Dabei fangen wir mit der größten Teilmenge an und werden schrittweise kleiner. + Wenn wir eine Clique finden ist sie die größte. + + Exakt haben wir eine Laufzeit von + \[ + \sum_{i=1}^n \binom{n}{i} \cdotp i^2 + \] + + Es exitieren maximal $2^n$ viele Teilmengen. Für jede Teilmenge $V'$ + prüfen wir für jedes Knotenpaar, ob sie adjazent sind. Das geht in $\Oh(n^2)$ Zeit. + Also $\Oh(2^n \cdotp n^2)$. + \points{2} + + \item \label{1b} + Wir prüfen diesmal für jede Teilmenge der Nachbarschaft $N(v)$ von $v$ (insbesondere ist + $v$ in der $N(v)$) ob sie eine + Clique ist. Wir fangen wieder mit den größten Teilmengen an. Wenn wir eine Clique + finden, ist sie die größte, die $v$ enthält. + + Die exakte Laufzeit ist damit + \[ + \sum_{i=1}^{deg(v)} \binom{\abs{N(v)}}{i} \cdotp i^2 + \] + + Den Knotengrad können wir mit dem Maximalknotengrad $\Delta$ abschätzen, + ebenso wie die Größe von $N(v)$. + Somit erhalten wir + \[ + \sum_{i=1}^\Delta \binom{\Delta}{i} \cdotp i^2 + \] + Das heißt wir bekommen asymptotisch $\Oh(2^\Delta \cdotp \Delta^2)$. + \points{2} + + \item + Mit dem Ansatz aus Teilaufgabe \ref{1b} können wir einen Algorithmus + für \alg*{Größte Clique} mit Parameter $\Delta$ konstruieren. + + Dafür iterieren wir über jeden Knoten $v \in V$ und führen für ihn unseren + Algorithmus aus. + + Das führt zu einer Laufzeit von $\Oh((2^\Delta \cdotp \Delta^2) \cdotp n)$, was in FPT liegt, da das die Form $\Oh(f(k) \cdotp \abs{I}^c)$ mit + Parameter $k$, Instanz $I$ und Konstante $c$ erfüllt. + \points{2} +\end{tasks} diff --git a/übung_10/aufgabe_2.tex b/übung_10/aufgabe_2.tex new file mode 100644 index 0000000..5ebb16d --- /dev/null +++ b/übung_10/aufgabe_2.tex @@ -0,0 +1,80 @@ +\section{Geradenüberdeckung} +\begin{tasks} + \item + Eine Gerade wird hinreichend bestimmt durch zwei Punkte, durch + die sie verläuft. Bei $n \geq 2$ können wir jede Gerade die nur einen + Punkt überdeckt, durch eine Gerade ersetzen, die durch mindestens zwei + Punkte verläuft. + \points{1} + + \item \label{2b} + Jede Gerade überdeckt mindestens zwei Punkte. Es gibt $n$ viele Punkte. + Also brauchen wir maximal $n \divslash 2$ Geraden. + \points{1} + \item + Eine Gerade die mehr als $k$ Punkte überdeckt ist in der Geradenüberdeckung. + + Angenommen wir haben eine Geradenüberdeckung $C$ bei der jede Gerade höchstens + $k$ Punkte überdeckt. + Wenn es eine Gerade $g$ gibt, die mehr als $k$ Punkte überdeckt und nicht in $C$ + ist, dann wird sie an maximal $k$ Punkten geschnitten, da in $C$ höchstens $k$ + Geraden sind. + Das bedeutet aber, dass nicht alle Punkte, die auf $g$ sind geschnitten und + damit überdeckt werden. + Das ist ein Widerspruch zur Annahme. + Somit muss $g$ in der Geradenüberdeckung sein. + \points{1} + + \item + Unter der Annahme, dass es keine Gerade gibt, die mehr als $k$ Punkte + enthält gilt: Für $k < \sqrt{n}$ gibt es keine Geradenüberdeckung. + + Angenommen jede Gerade überdeckt genau $k$ Punkte. Dann überdecken wir mit $k$ Geraden maximal $k^2$ Punkte. Da $k < \sqrt{n}$ sind das $k^2 < n$ viele Punkte und somit keine Geradenüberdeckung. + \points{1} + + + \newpage + \item + \alg*{$k$-Geradenüberdeckung}: + \begin{enumerate} + \item + Ist $k \geq n \divslash 2$, gib $true$ zurück. + + \item + Erzeuge die Menge $G$ aller Geraden, die von zwei Punkten aufgespannt werden. + Das sind $n^2$ viele. + + \item + Bestimme für jede Gerade die Anzahl der überdeckten Punkte. + Nehme die Geraden, die mehr als $k$ Punkte überdecken in die + Geradenüberdeckung $C$. Wir überprüfen für alle $n^2$ Geraden, + ob sie noch weitere Punkte überdecken. Also $n^2 \cdotp n$ Überprüfungen. + + \item + Ist $C = \emptyset$ und $k < \sqrt{n}$, gib $false$ zurück. + + \item + Löse den Rest mit Brute Force. + + Prüfe dafür für alle $A \in \binom{G \setminus C}{k - \abs{C}}$ ob $A \cup C$ alle Punkte überdeckt. Falls ja, gib $true$ zurück, sonst gib $false$ + zurück. + \end{enumerate} + + Im Worst Case finden wir keine Geraden die mehr als $k$ Punkte überdecken. + Dann iterieren wir über alle $\binom{\abs{G}}{k}$ Mengen von Geraden. + Da $k \geq \sqrt{n}$ gilt + und $\abs{G} = n^2$ können wir folgende Abschätzung machen. + \[ + \binom{\abs{G}}{k} = \binom{n^2}{k} = \binom{(\sqrt{n})^4}{k} \leq \binom{k^4}{k} + \] + + Wir erhalten somit eine Gesamtlaufzeit von + \[ + \Oh\parens{n^2 + n^3 + \overbrace{\binom{k^4}{k} \cdotp n}^\text{Für jede Auswahl an Geraden alle Punkte prüfen}} + \] + Das liegt in FPT. + \points{5} + + + +\end{tasks} diff --git a/übung_10/aufgabe_3.tex b/übung_10/aufgabe_3.tex new file mode 100644 index 0000000..3808139 --- /dev/null +++ b/übung_10/aufgabe_3.tex @@ -0,0 +1,23 @@ +\section{Mehrgüterfluss} +\begin{tasks} + \item + Siehe \autoref{fig:3a}. + \points{2} + \begin{figure} + \centering + \includegraphics[page=1]{figures.pdf} + \caption{Maximaler Fluss mit Gesamtflusswert $1$.} + \label{fig:3a} + \end{figure} + + \item + Siehe \autoref{fig:3b} + \points{3} + \begin{figure} + \centering + \includegraphics[page=2]{figures.pdf} + \caption{Maximaler Fluss mit Gesamtflusswert $1$.} + \label{fig:3b} + \end{figure} + +\end{tasks} diff --git a/übung_10/aufgabe_4.tex b/übung_10/aufgabe_4.tex new file mode 100644 index 0000000..4535a11 --- /dev/null +++ b/übung_10/aufgabe_4.tex @@ -0,0 +1,38 @@ +\section{Längste Wege} +\begin{tasks} + \item + Da $s, t$ in $G'$ adjazent zu jedem Knoten in $G$ ist, können wir + einen einfachen $s$-$t$-Weg der Länge $k+2$ erzeugen, indem wir + einen einfachen Weg der Länge $k$ in $G$ nehmen, $s$ an das eine Ende und $t$ an das andere Ende hängen. + + Umgekehrt kann man aus einem einfachen $s$-$t$-Weg der Länge $k$ + in $G'$ einen einfachen Weg der Länge $k-2$ in $G$ konstruieren, + indem wir $s$ und $t$ entfernen. + \points{2} + + \item + Ein Hamiltonweg ist ein Weg der alle Knoten in $G$ beinhaltet + und somit Länge $n-1$ besitzt. + + Wie wir oben gezeigt haben, kann ein $s$-$t$-Weg der Länge $n+1$ + in $G'$ leicht in einen Weg der Länge $n-1$ in $G$ umgewandelt + werden. Das heißt, dass wir einen Hamiltonweg in $G$ finden, + wenn wir einen $s$-$t$-Weg finden. + + Umgekehrt können wir einen Hamiltonweg leicht in einen $s$-$t$-Weg + umwandeln, also finden wir einen $s$-$t$-Weg wenn wir einen + Hamiltonweg finden. + + Also finden wir einen Hamiltonweg genau dann, wenn wir einen + $s$-$t$-Weg finden. + \points{1} + + \item + Da wir Hamiltonweg auf \algt{Längster $s$-$t$-Weg} reduziert + haben, muss also \algt{Längster $s$-$t$-Weg} $\NPe$-schwer sein, denn + wenn es in $\Pe$ liegen würde, könnten wir auch Hamiltonweg in + polynomieller Zeit lösen. Da wir nicht von $\Pe = \NPe$ ausgehen, + ist das nicht möglich. + \points{2} + +\end{tasks} diff --git a/übung_10/figures.pdf b/übung_10/figures.pdf new file mode 100644 index 0000000..8b7c4fb Binary files /dev/null and b/übung_10/figures.pdf differ diff --git a/übung_10/ngexrcs.cls b/übung_10/ngexrcs.cls new file mode 100644 index 0000000..66cdfad --- /dev/null +++ b/übung_10/ngexrcs.cls @@ -0,0 +1,72 @@ +% 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{ngutils} + +% define fonts +\RequirePackage{fontspec} +\RequirePackage[math-style=upright]{unicode-math} +\setmainfont{TeX Gyre Pagella} +\setsansfont{TeX Gyre Heros} +\setmonofont{TeX Gyre Cursor} +\setmathfont{Euler Math} +\mathitalicsmode=1 + +\setlength{\marginparwidth}{1.5\marginparwidth} +\setlength{\fboxrule}{\heavyrulewidth} + +% Use sansfont for all title elements +\addtokomafont{titlehead}{\sffamily} +\addtokomafont{subject}{\sffamily} +\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][1em]{\marginline{\framebox{{\usekomafont{points}\hspace{#1} \textbf{/} #2}}}} + +\newcounter{task} +\renewcommand{\thetask}{\@alph\c@task)} +\newenvironment{tasks} +{ + \begin{list}{\thetask} + { + \usecounter{task} + \setlength{\leftmargin}{1.6em} + } +}{% + \end{list} +} + +\DeclareNewTOC +[ + type=algorithm, + types=algorithms, + float, + floattype=4, + name=Algorithmus, + listname={Algorithmenverzeichnis} +] +{loa} diff --git a/übung_10/ngutils.sty b/übung_10/ngutils.sty new file mode 100644 index 0000000..bc039bc --- /dev/null +++ b/übung_10/ngutils.sty @@ -0,0 +1,109 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{ngutils}[2026/06/05 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={, and, or, not, 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{\argmax}{\mathop{\mathrm{arg\,max}}} +\newcommand{\argmin}{\mathop{\mathrm{arg\,min}}} +\newcommand{\seilpmi}{\Longleftarrow} + +\newcommand{\NN}{\mathbb{N}} +\newcommand{\ZZ}{\mathbb{Z}} +\newcommand{\QQ}{\mathbb{Q}} +\newcommand{\RR}{\mathbb{R}} +\newcommand{\CC}{\mathbb{C}} +\newcommand{\PP}{\mathbb{P}} + +\newcommand{\pot}{\mathcal{P}} + +\newcommand{\REC}{\mathrm{REC}} +\newcommand{\RE}{\mathrm{RE}} +\newcommand{\EA}{\mathrm{EA}} +\newcommand{\DEA}{\mathrm{DEA}} +\newcommand{\NEA}{\mathrm{DEA}} + +\newcommand{\Pe}{\mathrm{P}} +\newcommand{\NPe}{\mathrm{NP}} + +\newcommand{\Oh}{\mathcal{O}} +\newcommand{\oh}{\mathcal{o}} + +\newcommand{\indeg}{\mathrm{indeg}} +\newcommand{\outdeg}{\mathrm{outdeg}} + +\newcommand{\Eh}{\mathrm{E}} +\newcommand{\Var}{\mathrm{Var}} + +\newcommand{\parens}[1]{\left(#1\right)} +\newcommand{\brackets}[1]{\left[#1\right]} +\newcommand{\braces}[1]{\left\{#1\right\}} +\newcommand{\angled}[1]{\left\langle#1\right\rangle} + +\newcommand{\suchthat}{\;\middle\vert\;} +\newcommand{\set}[1]{\braces{#1}} +\newcommand{\tup}[1]{\parens{#1}} +\newcommand{\interval}[2][b]{ + \if\detokenize{a}\detokenize{#1}% + \left[#2\right[ + \fi + \if\detokenize{b}\detokenize{#1}% + \left[#2\right] + \fi + \if\detokenize{c}\detokenize{#1}% + \left]#2\right[ + \fi + \if\detokenize{d}\detokenize{#1}% + \left]#2\right] + \fi +} +\newcommand{\arr}[1]{\angled{#1}} +\newcommand{\abs}[1]{\left\vert#1\right\vert} +\newcommand{\norm}[1]{\left\Vert#1\right\Vert} +\newcommand{\ceil}[1]{\left\lceil#1\right\rceil} +\newcommand{\floor}[1]{\left\lfloor#1\right\rfloor} + +\newcommand{\algt}[1]{{\normalfont\scshape#1}} + +\makeatletter +\newcommand*{\alg@unstarred}[2]{{\normalfont\scshape#1}{\normalfont(#2)}} +\newcommand*{\alg@starred}[1]{{\normalfont\scshape#1}} +\newcommand*{\alg}{\@ifstar{\alg@starred}{\alg@unstarred}} +\makeatother + +\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} +} + diff --git a/übung_8/agt_übung_8_korr.pdf b/übung_8/agt_übung_8_korr.pdf new file mode 100644 index 0000000..820e03e Binary files /dev/null and b/übung_8/agt_übung_8_korr.pdf differ diff --git a/übung_9/agt_übung_9_korr.pdf b/übung_9/agt_übung_9_korr.pdf new file mode 100644 index 0000000..4e2bdd3 Binary files /dev/null and b/übung_9/agt_übung_9_korr.pdf differ