|
4 | 4 | Borůvka's algorithm is a greedy algorithm for finding a minimum spanning tree in a graph,
|
5 | 5 | or a minimum spanning forest in the case of a graph that is not connected.
|
6 | 6 |
|
7 |
| - The time complexity of this algorithm is O(ElogV), where E represents the number of edges, |
| 7 | + The time complexity of this algorithm is O(ELogV), where E represents the number of edges, |
8 | 8 | while V represents the number of nodes.
|
9 | 9 |
|
10 | 10 | The space complexity of this algorithm is O(V + E), since we have to keep a couple of lists whose sizes are equal
|
@@ -39,40 +39,40 @@ def __init__(self, num_of_nodes: int) -> None:
|
39 | 39 | self.m_edges = []
|
40 | 40 | self.m_component = {}
|
41 | 41 |
|
42 |
| - def add_edge(self, u: int, v: int, weight: int) -> None: |
| 42 | + def add_edge(self, u_node: int, v_node: int, weight: int) -> None: |
43 | 43 | """Adds an edge in the format [first, second, edge weight] to graph."""
|
44 | 44 |
|
45 |
| - self.m_edges.append([u, v, weight]) |
| 45 | + self.m_edges.append([u_node, v_node, weight]) |
46 | 46 |
|
47 |
| - def find_component(self, u: int) -> int: |
| 47 | + def find_component(self, u_node: int) -> int: |
48 | 48 | """Propagates a new component throughout a given component."""
|
49 | 49 |
|
50 |
| - if self.m_component[u] == u: |
51 |
| - return u |
52 |
| - return self.find_component(self.m_component[u]) |
| 50 | + if self.m_component[u_node] == u_node: |
| 51 | + return u_node |
| 52 | + return self.find_component(self.m_component[u_node]) |
53 | 53 |
|
54 |
| - def set_component(self, u: int) -> None: |
| 54 | + def set_component(self, u_node: int) -> None: |
55 | 55 | """Finds the component index of a given node"""
|
56 | 56 |
|
57 |
| - if self.m_component[u] == u: |
| 57 | + if self.m_component[u_node] == u_node: |
58 | 58 | return
|
59 | 59 | else:
|
60 | 60 | for k in self.m_component.keys():
|
61 | 61 | self.m_component[k] = self.find_component(k)
|
62 | 62 |
|
63 |
| - def union(self, component_size: list, u: int, v: int) -> None: |
| 63 | + def union(self, component_size: list, u_node: int, v_node: int) -> None: |
64 | 64 | """Union finds the roots of components for two nodes, compares the components in terms of size,
|
65 | 65 | and attaches the smaller one to the larger one to form single component """
|
66 | 66 |
|
67 |
| - if component_size[u] <= component_size[v]: |
68 |
| - self.m_component[u] = v |
69 |
| - component_size[v] += component_size[u] |
70 |
| - self.set_component(u) |
| 67 | + if component_size[u_node] <= component_size[v_node]: |
| 68 | + self.m_component[u_node] = v_node |
| 69 | + component_size[v_node] += component_size[u_node] |
| 70 | + self.set_component(u_node) |
71 | 71 |
|
72 |
| - elif component_size[u] >= component_size[v]: |
73 |
| - self.m_component[v] = self.find_component(u) |
74 |
| - component_size[u] += component_size[v] |
75 |
| - self.set_component(v) |
| 72 | + elif component_size[u_node] >= component_size[v_node]: |
| 73 | + self.m_component[v_node] = self.find_component(u_node) |
| 74 | + component_size[u_node] += component_size[v_node] |
| 75 | + self.set_component(v_node) |
76 | 76 |
|
77 | 77 | print(self.m_component)
|
78 | 78 |
|
|
0 commit comments