From 6c8112f8e47e488e8ebccb172789e7e24716bf7b Mon Sep 17 00:00:00 2001 From: Hykilpikonna Date: Mon, 21 Mar 2022 15:25:00 -0400 Subject: [PATCH] [+] A3 P3 Q3.a --- assignments/A3/a3.tex | 11 +++++++++-- assignments/A3/a3_part3.py | 10 +++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/assignments/A3/a3.tex b/assignments/A3/a3.tex index 93746ec..4256373 100644 --- a/assignments/A3/a3.tex +++ b/assignments/A3/a3.tex @@ -34,7 +34,7 @@ There are two operations that involves iteration in the function, one reads the In creating $mp$, the program first opened the file and created a \texttt{csv.reader}, which are both constant-time operations. Then, the dictionary comprehension statement loops through all $n$ lines, running only constant-time operations in each iteration for adding the book id and name pair into the dictionary, resulting in a running time of $\Theta(n)$. Summing up all the operations for creating $mp$ and ignoring constant-time operations, the running time would be $\in \Theta(n)$. -For adding the vertices, it also opened the file and created a \texttt{csv.reader} in constant time. Then, the loop iterates through all $m$ lines. In each iteration, two vertices and one edge are added, and it also accessed $mp$ to retrieve the book name, which are all constant time operations. Therefore, the total running time would be contained by $\in \Theta(m)$. +For adding the vertices, it also opened the file and created a \texttt{csv.reader} in constant time. Then, the loop iterates through all $m$ lines. In each iteration, two vertices and one edge are added, and it also accessed $mp$ to retrieve the book name, which are all constant time operations. Therefore, the total running time would be $\in \Theta(m)$. Since there are only constant-time operations outside the two iterating operations, the total running time of the function would be $\in \Theta(m + n)$ @@ -71,7 +71,14 @@ Do \textbf{not} include your solution in this file. \begin{enumerate} \item[(a)] -TODO: Write your answer here. +Running Time Analysis for \texttt{cross\_cluster\_weight}: + +Let $m_1$ be the size of \texttt{cluster1}, and let $m_2$ be the size of \texttt{cluster2}. + +There is one nested loop in the function. The inner loop iterates $m_2$ times through all values in \texttt{cluster2}, and the outer loop iterates $m_1$ times through all values in \texttt{cluster1}. Inside the inner loop, there is only one function call \texttt{get\_weight}, which is constant-time because it only involves constant-time operations like dictionary accessing and variable assignment. After the function call, the returned value is added to \texttt{sw}, which is one constant-time operation. Let $c$ be a constant representing the number of constant time operations inside the inner loop. The nested loop will run $m_1 * m_2 * c$ operations in total, which is $\in \Theta(m_1 * m_2)$ + +Since there are only constant-time operations such as \texttt{len(set)}, variable assignment, and multiplication or division outside the nested loop, the running time of the function will be $\in \Theta(m_1 * m_2)$ + \item[(b)] TODO: Write your answer here. diff --git a/assignments/A3/a3_part3.py b/assignments/A3/a3_part3.py index aa491ec..dba2908 100644 --- a/assignments/A3/a3_part3.py +++ b/assignments/A3/a3_part3.py @@ -95,9 +95,13 @@ def cross_cluster_weight(book_graph: WeightedGraph, cluster1: set, cluster2: set >>> cross_cluster_weight(bg, {'B0', 'B1'}, {'B2', 'B3'}) == (.4 + .3) / 4 True """ - numerator = sum(book_graph.get_weight(v1, v2) for v1 in cluster1 for v2 in cluster2) - denominator = len(cluster1) * len(cluster2) - return numerator / denominator + # sw = sum(book_graph.get_weight(v1, v2) for v1 in cluster1 for v2 in cluster2) + sw = 0 + for v1 in cluster1: + for v2 in cluster2: + sw += book_graph.get_weight(v1, v2) + + return sw / (len(cluster1) * len(cluster2)) ################################################################################