def targeted_order(ugraph): """ Compute a targeted attack order consisting of nodes of maximal degree Returns: A list of nodes """ # copy the graph new_graph = utility.copy_graph(ugraph) order = [] while len(new_graph) > 0: max_degree = -1 for node in new_graph: if len(new_graph[node]) > max_degree: max_degree = len(new_graph[node]) max_degree_node = node neighbors = new_graph[max_degree_node] new_graph.pop(max_degree_node) for neighbor in neighbors: new_graph[neighbor].remove(max_degree_node) order.append(max_degree_node) return order
def fast_targeted_order(ugraph): graph = utility.copy_graph(ugraph) degree_set = defaultdict(set) for node in graph.keys(): degree_set[len(graph[node])].add(node) idx = 0 order = [] for k in reversed(range(len(graph)-1)) : while len(degree_set[k]) != 0: node = degree_set[k].pop() neighbors = graph[node] for neighbor in neighbors: d = len(graph[neighbor]) degree_set[d].discard(neighbor) degree_set[d-1].add(neighbor) order.append(node) utility.delete_node(graph, node) return order;