Compare commits

..

2 commits

Author SHA1 Message Date
e0854b1088 Aufgabe 2 2026-05-10 18:46:23 +02:00
f2ee389e5d Formatierung anpassen... Ich konnte es nicht lassen 2026-05-10 18:45:27 +02:00
3 changed files with 43 additions and 13 deletions

Binary file not shown.

View file

@ -4,7 +4,8 @@
$$ $$
T(P)=\begin{cases} T(P)=\begin{cases}
0 &\textnormal{falls } P \textnormal{ nur 2 Ecken hat}\\ 0 &\textnormal{falls } P \textnormal{ nur 2 Ecken hat}\\
\min_{i\in \{2,...,n-1\}} [T(p_{1,i})+T(P_{i,n})+ \textnormal{Diagonalkosten}(i)] &\textnormal{sonst} \min_{i\in \{2,...,n-1\}} [T(p_{1,i})+T(P_{i,n}) \\
+ \textnormal{Diagonalkosten}(i)] &\textnormal{sonst}
\end{cases} \end{cases}
$$ $$
$$ $$
@ -14,14 +15,18 @@
d(p_1, p_i)+d(p_i, p_{n}) &\textnormal{sonst} d(p_1, p_i)+d(p_i, p_{n}) &\textnormal{sonst}
\end{cases} \end{cases}
$$ $$
Die Kosten der minimalen Triangulierung $T(P)$ lassen sich aus der minimalsten Summe der konstenminimalsten Triangulierung der entstehenden Teilpolygone $T(p_{1,i})$ und $T(p_{i,n})$ und den entstehenden Diagonalenkosten berechnen.\\ Die Kosten der minimalen Triangulierung $T(P)$ lassen sich aus der minimalsten Summe der konstenminimalsten Triangulierung der entstehenden Teilpolygone $T(p_{1,i})$ und $T(p_{i,n})$ und den entstehenden Diagonalenkosten berechnen.
Die Diagonalenkosten unterscheiden sich, je nachdem ob eine oder zwei der drei Kanten Polygonkanten sind. Sobald ein (Teil-)Polygon nur noch zwei Ecken hat bricht die Rekursion ab. Die Diagonalenkosten unterscheiden sich, je nachdem ob eine oder zwei der drei Kanten Polygonkanten sind. Sobald ein (Teil-)Polygon nur noch zwei Ecken hat bricht die Rekursion ab.
\points{2} \points{2}
\item \item
Man nutzt die Idee aus a.\\ Man nutzt die Idee aus a.
\textbf{Tabelle $A[i,j]$} speichert die kostenminimalen Triangulierung des Teilpolygons mit den Ecken $p_i,...,p_j$\\
Für alle $i$ gilt $A[i,i+1]=0$, da diese Teilpolygone mit nur zwei Ecken darstellen, welche keine Triangulierung benötigen.\\ \textbf{Tabelle $A[i,j]$} speichert die kostenminimalen Triangulierung des Teilpolygons mit den Ecken $p_i,...,p_j$.
Für alle $i$ gilt $A[i,i+1]=0$, da diese Teilpolygone mit nur zwei Ecken darstellen, welche keine Triangulierung benötigen.
Für $j>i+1$ gilt: Für $j>i+1$ gilt:
$$ $$
A[i,j]=\min_{k\in\{i+1,...,j-1\}}[A[i,k]+A[k,j]+\textnormal{Diagonalkosten}(i,k,j)] A[i,j]=\min_{k\in\{i+1,...,j-1\}}[A[i,k]+A[k,j]+\textnormal{Diagonalkosten}(i,k,j)]
@ -33,21 +38,27 @@
d(p_i, p_k)+d(p_k, p_j) &\textnormal{sonst} d(p_i, p_k)+d(p_k, p_j) &\textnormal{sonst}
\end{cases} \end{cases}
$$ $$
Man berechnet dabei die Einträge nach nach wachsendem Abstand $r=j-i$, also von $r=2$ bis $r=n-1$. Dadurch sind die Einträge $A[i,k]$ und $A[k,j]$ immer bereits berechnet wenn man den $A[i,j]$ benötigt, da $k-i<r$ und $j-k<r$ gilt.\\ Man berechnet dabei die Einträge nach nach wachsendem Abstand $r=j-i$, also von $r=2$ bis $r=n-1$. Dadurch sind die Einträge $A[i,k]$ und $A[k,j]$ immer bereits berechnet wenn man den $A[i,j]$ benötigt, da $k-i<r$ und $j-k<r$ gilt.
Das Ergebnis steht dann in $A[1,n]$.\\\\
Das Ergebnis steht dann in $A[1,n]$.
\points{4} \points{4}
\item \item
Die polynomielle Laufzeit kann über die Schleifen des DP begründet werden.\\ Die polynomielle Laufzeit kann über die Schleifen des DP begründet werden.
Äußere Schleife: $r$ läuft von 1 bis $n-1$ benötigt also $\Oh(n)$ Schritte\\
Mittlere Schleife: für jedes $r$ gibt es $\Oh(n)$ Paare $(i,j)$ bei welchen $j-i=r$ gilt.\\ Äußere Schleife: $r$ läuft von 1 bis $n-1$ benötigt also $\Oh(n)$ Schritte.
Innere Schleife: Für jedes Paar probiert man alle $k$ zwischen $i$ und $j$ also $\Oh(n)$ Werte.\\
Pro Iteration der inneren Schleife benötigt man $\Oh(1)$ um die Einträge zu berechnen.\\ Mittlere Schleife: für jedes $r$ gibt es $\Oh(n)$ Paare $(i,j)$ bei welchen $j-i=r$ gilt.
Innere Schleife: Für jedes Paar probiert man alle $k$ zwischen $i$ und $j$ also $\Oh(n)$ Werte.
Pro Iteration der inneren Schleife benötigt man $\Oh(1)$ um die Einträge zu berechnen.
Daraus folgt: Daraus folgt:
$$ $$
T(n)=\Oh(n)\cdot\Oh(n)\cdot\Oh(n)\cdot\Oh(1)=\Oh(n³) T(n)=\Oh(n)\cdot\Oh(n)\cdot\Oh(n)\cdot\Oh(1)=\Oh(n³)
$$ $$
Diese Schranke ist auch scharf, da jeder der $\Oh()$ Tabelleneinträgen auch tatsächlich befüllt wird und für jeden der Einträge im Durchschnitt $\Theta(n)$ Werte von $k$ durchprobiert werden. Es gilt also $\Theta()$.\\\\ Diese Schranke ist auch scharf, da jeder der $\Oh()$ Tabelleneinträgen auch tatsächlich befüllt wird und für jeden der Einträge im Durchschnitt $\Theta(n)$ Werte von $k$ durchprobiert werden. Es gilt also $\Theta()$.
Der Speicherbedarf des Programms ist $\Oh()$, da die Tabelle so viele Einträge für die Paare $(i,j)$ mit $1\leq i<j\leq n$ hat. Der Speicherbedarf des Programms ist $\Oh()$, da die Tabelle so viele Einträge für die Paare $(i,j)$ mit $1\leq i<j\leq n$ hat.
\points{2} \points{2}

View file

@ -2,5 +2,24 @@
\section{TSP mit Wiederholungen} \section{TSP mit Wiederholungen}
\begin{tasks} \begin{tasks}
\item \item
Um TSP mit Wiederholungen auf Metrisches TSP zu reduzieren, müssen wir den zugrundeliegenden Graphen
metrisch machen, d. h. die Dreiecksungleichung muss für jede Menge von $3$ Knoten gelten.
Dazu iterieren wir über alle möglichen Mengen $T = \set{a, b, c}$ mit $a \neq b \neq c$ und $a, b, c \in V$ und $G(T, E)$ ist vollständig.
Erfüllt eine Menge die Dreiecksungleichung $c(a,b) \leq c(b,c) + c(a,c)$ nicht, so löschen wir
die Kante mit den höchsten Kosten aus dem Graphen.
Das dürfen wir, da die TSP-Tour diese Kante nie enthalten wird, weil es einen Weg gibt, der
kürzer ist und alle drei Knoten enthält. Der Graph bleibt zusammenhängend, da wir für jede
Menge $T$ nur eine Kante löschen.
\item \item
Da wir den Graphen jetzt auf einen metrischen reduziert haben, können wir ähnlich wie in
der Vorlesung vorgehen.
Dazu nehmen wir einen Minimalen Spannbaum des Metrischen Graphen. Durch verdoppeln der Kanten
entsteht ein Kreis für dessen Kosten gilt (siehe Vorlesung):
$$
c(Kreis) = 2 \cdotp c(MSB) \leq 2 \cdotp OPT
$$
Da wir Knoten und Kanten mehrfach benutzen dürfen, ist dieser Kreis eine 2-Approximation für
TSP mit Wiederholungen.
\end{tasks} \end{tasks}