\newpage \subsection{MST} \subsubsection{Prim's algorithm} \begin{definition}[]{Definition of Prim's Algorithm} Prim's Algorithm is a greedy algorithm for finding the Minimum Spanning Tree (MST) of a connected, weighted graph. It starts with an arbitrary node and iteratively adds the smallest edge connecting a vertex in the MST to a vertex outside the MST until all vertices are included. \end{definition} \begin{properties}[]{Characteristics and Performance of Prim's Algorithm} \begin{itemize} \item \textbf{Graph Type:} Works on undirected, weighted graphs. \item \textbf{Approach:} Greedy, vertex-centric. \item \textbf{Time Complexity:} \begin{itemize} \item With an adjacency matrix: \tct{V^2}. \item With a priority queue and adjacency list: \tct{(|V| + |E|) \log(|V|)}. \end{itemize} \item \textbf{Space Complexity:} Depends on the graph representation, typically \tct{E + V}. \item \textbf{Limitations:} Less efficient than Kruskal's for sparse graphs using adjacency matrices. \end{itemize} \end{properties} \begin{algorithm} \caption{Prim's Algorithm} \begin{algorithmic}[1] \Procedure{Prim}{$G = (V, E)$, $start$} \State Initialize a priority queue $Q$. \State Initialize $key[v] \gets \infty$ for all $v \in V$, except $key[start] \gets 0$. \State Initialize an empty MST $T$. \State Add all vertices to $Q$ with their key values. \While{$Q$ is not empty} \State $u \gets$ ExtractMin($Q$). \State Add $u$ to $T$. \For{each $(u, v)$ in $E$} \If{$v$ is in $Q$ and weight($u, v$) $< key[v]$} \State $key[v] \gets$ weight($u, v$). \State Update $Q$ with $key[v]$. \EndIf \EndFor \EndWhile \State \Return $T$. \EndProcedure \end{algorithmic} \end{algorithm} \begin{usage}[]{Prim's Algorithm} Prim's algorithm is used to find the Minimum Spanning Tree (MST) of a graph. It starts with a single node and grows the MST by adding the smallest edge that connects a vertex in the MST to a vertex outside it. \begin{enumerate} \item \textbf{Initialize:} \begin{itemize} \item Pick any starting vertex as part of the MST. \item Mark the vertex as visited and add it to the MST. \item Initialize a priority queue to store edges by their weight. \end{itemize} \item \textbf{Explore Edges:} \begin{itemize} \item Add all edges from the visited vertex to the priority queue. \end{itemize} \item \textbf{Pick the Smallest Edge:} \begin{itemize} \item Choose the smallest-weight edge from the priority queue that connects a visited vertex to an unvisited vertex. \end{itemize} \item \textbf{Add the New Vertex:} \begin{itemize} \item Mark the vertex connected by the chosen edge as visited. \item Add the edge and the vertex to the MST. \end{itemize} \item \textbf{Repeat:} \begin{itemize} \item Repeat steps 2-4 until all vertices are part of the MST or no more edges are available. \end{itemize} \item \textbf{End:} \begin{itemize} \item The MST is complete when all vertices are visited, and the selected edges form a connected acyclic graph. \end{itemize} \end{enumerate} \end{usage}