def clustering_1(input_file: str): lines = BasicFuncs.load_file_as_string(input_file).splitlines() num_of_nodes = int(lines[0]) edges = [] for line in lines[1:]: start, finish, cost = map(int, line.split(' ')) edge = Edge(start, finish, cost) edges.append(edge) edges.sort(key=lambda edge: edge.cost) clusters = num_of_nodes union_find = UnionFind(num_of_nodes) for i, edge in enumerate(edges): a = edge.start - 1 b = edge.end - 1 if union_find.join_two_subsets(a, b): clusters -= 1 if clusters <= 4: break # Compute the smallest maximum spacing min_max_spacing = float('inf') for edge in edges[i + 1:]: a = edge.start - 1 b = edge.end - 1 if not union_find.are_two_indicies_part_of_same_set(a, b): min_max_spacing = min(min_max_spacing, edge.cost) return min_max_spacing
def kruskals_algorithm(edges_file: str): s = BasicFuncs.load_file_as_string(edges_file) lines = s.splitlines() first_line = lines[0] num_of_nodes, num_of_edges = map(int, first_line.split(' ')) union_find = UnionFind(num_of_nodes) edges = [] for line in lines[1:]: start, end, cost = map(int, line.split(' ')) edge = Edge(start, end, cost) edges.append(edge) edges.sort(key=lambda x: x.cost) min_span_tree_cost = 0 for edge in edges: a = edge.start - 1 b = edge.end - 1 if union_find.join_two_subsets(a, b): min_span_tree_cost += edge.cost return min_span_tree_cost