[+] A3 P3 Q3.a
This commit is contained in:
@@ -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)$.
|
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)$
|
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}
|
\begin{enumerate}
|
||||||
\item[(a)]
|
\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)]
|
\item[(b)]
|
||||||
TODO: Write your answer here.
|
TODO: Write your answer here.
|
||||||
|
|||||||
@@ -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
|
>>> cross_cluster_weight(bg, {'B0', 'B1'}, {'B2', 'B3'}) == (.4 + .3) / 4
|
||||||
True
|
True
|
||||||
"""
|
"""
|
||||||
numerator = sum(book_graph.get_weight(v1, v2) for v1 in cluster1 for v2 in cluster2)
|
# sw = sum(book_graph.get_weight(v1, v2) for v1 in cluster1 for v2 in cluster2)
|
||||||
denominator = len(cluster1) * len(cluster2)
|
sw = 0
|
||||||
return numerator / denominator
|
for v1 in cluster1:
|
||||||
|
for v2 in cluster2:
|
||||||
|
sw += book_graph.get_weight(v1, v2)
|
||||||
|
|
||||||
|
return sw / (len(cluster1) * len(cluster2))
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|||||||
Reference in New Issue
Block a user