diff --git a/GA4/ga4.pdf b/GA4/ga4.pdf index a199d40..a3e33e6 100644 Binary files a/GA4/ga4.pdf and b/GA4/ga4.pdf differ diff --git a/GA4/ga4.tex b/GA4/ga4.tex index 5424563..dc65579 100644 --- a/GA4/ga4.tex +++ b/GA4/ga4.tex @@ -5,6 +5,7 @@ \usepackage{xcolor} \usepackage{lmodern} \usepackage{listings} +\usepackage{hyperref} \title{Graded Assignment 4 -- DSA} \author{Claudio Maggioni} @@ -194,12 +195,14 @@ edge in the minimal spanning tree. The other parameters must be given as describ FUNCTION IS-MST-MINIMAL(T=(V,E), weight, v, w, c): P[w] = NIL DEFINE-PARENT(T, P, Adj[w], w) - edge1_w = weight($\textit{edge}$ (v, P[v])) s = v - while P[s] $\neq$ w: + while s $\neq$ w: + edge_w = weight($\textit{edge}$ (s, P[s])) + if edge_w > c: + return FALSE s = P[s] - edge2_w = weight($\textit{edge}$ (s, w)) - return c > edge1_w $\land$ c > edge2_w + + return TRUE FUNCTION DEFINE-PARENT(G=(V,E), P, S, v): for each vertex u $\in$ S: @@ -208,27 +211,19 @@ FUNCTION DEFINE-PARENT(G=(V,E), P, S, v): \end{lstlisting} The algorithm works by walking the entire tree with \texttt{DEFINE-PARENT} in order to define a parent relation considering $w$ as -the root. Then, this relation is used to define the path between $v$ and $w$, and the weights of the -first outgoing edge from $v$ and the final edge to $w$ are memorized in \texttt{edge1\_w} and \texttt{edge2\_w}. -The complexity of this step is $O(|V|)$ since the total number of edges in a tree is linearly dependent to the number +the root. Then, this relation is used to define the path between $v$ and $w$, and the weights of every edge in the path from $v$ to +$w$ are memorized in \texttt{edge\_w} and compared and checked against the weight of $(v, w)$. If we find an edge in the path with +weight bigger than $(v, w)$ we can then replace that edge with $(v, w)$, so we return \texttt{FLASE}\textit{ (sic)} +\footnote{\url{https://medium.com/@DanielC7/dbf8773df767}} since we the old MST is not minimal anymore. +The complexity of this is $O(|V|)$ since the total number of edges in a tree is linearly dependent to the number of vertices (i.e.: $|E_T| = |V| - 1$). -Note that if $v$ and $w$ are adjacent then these two values are the same, but this does not compromise the algorithm. - -Finally, we check if $(v, w)$ is the the edge with highest weight with respect to \textit{edge1} and \textit{edge2}. If this is the -case, then replacing \textit{edge1} or \textit{edge2} with $(v, w)$ would not give a spanning tree with minimum total weight, and -thus we return \texttt{FALSE}. Otherwise, the opposite is true and we return \texttt{TRUE}. Note that this step is constant, so the -total complexity is $O(|V|)$. - \subsection{Point 2} \begin{lstlisting}[caption=Solution for exercise 4 point 2, label={lst:ex4p1}] FUNCTION MAKE-MST-MINIMAL(T=(V,E), weight, v, w, c): if not IS-MST-MINIMAL(T, weight, v, w, c): - if edge1_w < edge2_w: - $\textit{delete edge1 from T}$ - else: - $\textit{delete edge2 from T}$ + $\textit{delete edge where IS-MST-MINIMAL stopped from T}$ $\textit{add (v, w) to T}$ \end{lstlisting}