def fast_targeted_order(ugraph): """ Compute a targeted attack order consisting of nodes of maximal degree. """ n = len(ugraph) new_graph = app2.copy_graph(ugraph) degree_sets = {} for node, neighbors in ugraph.iteritems(): degree_sets.setdefault(len(neighbors), set()).add(node) order = [] i = 0 for k in range(n-1, 0, -1): if degree_sets.has_key(k): while len(degree_sets[k]) != 0: max_degree_node = degree_sets[k].pop() for neighbor in new_graph[max_degree_node]: d = len(new_graph[neighbor]) degree_sets[d].remove(neighbor) degree_sets.setdefault(d-1, set()).add(neighbor) order.append(max_degree_node) prj2.delete_node(new_graph, max_degree_node) i += 1 if i < n: order.extend(new_graph.keys()) return order
def fast_targeted_order(ugraph): """ Compute a targeted attack order consisting of nodes of maximal degree. """ n = len(ugraph) new_graph = app2.copy_graph(ugraph) degree_sets = {} for node, neighbors in ugraph.iteritems(): degree_sets.setdefault(len(neighbors), set()).add(node) order = [] i = 0 for k in range(n - 1, 0, -1): if degree_sets.has_key(k): while len(degree_sets[k]) != 0: max_degree_node = degree_sets[k].pop() for neighbor in new_graph[max_degree_node]: d = len(new_graph[neighbor]) degree_sets[d].remove(neighbor) degree_sets.setdefault(d - 1, set()).add(neighbor) order.append(max_degree_node) prj2.delete_node(new_graph, max_degree_node) i += 1 if i < n: order.extend(new_graph.keys()) return order
def question4(): NETWORK_URL = "http://storage.googleapis.com/codeskulptor-alg/alg_rf7.txt" network_graph = app2.load_graph(NETWORK_URL) network_idd = prj1.in_degree_distribution(network_graph) network_nodes = sum(network_idd.values()) network_edges = sum([x * y for (x, y) in network_idd.iteritems()]) / 2 network_prob = float(network_edges) / network_nodes / (network_nodes - 1) print "Network_nodes", network_nodes print "Network_edges", network_edges print "Network_prob", network_prob print "Network_m", network_edges / float(network_nodes) er_graph = er_makegraph(1347, 0.00172) er_idd = prj1.in_degree_distribution(er_graph) er_nodes = sum(er_idd.values()) er_edges = sum([x * y for (x, y) in er_idd.iteritems()]) / 2 print "ER_nodes", er_nodes print "ER_edges", er_edges upa_graph = upa_makegraph(1347, 2) upa_idd = prj1.in_degree_distribution(upa_graph) upa_nodes = sum(upa_idd.values()) upa_edges = sum([x * y for (x, y) in upa_idd.iteritems()]) / 2 print "UPA_nodes", upa_nodes print "UPA_edges", upa_edges network_resilience = prj2.compute_resilience( network_graph, fast_targeted_order(network_graph)) er_resilience = prj2.compute_resilience(er_graph, fast_targeted_order(er_graph)) upa_resilience = prj2.compute_resilience(upa_graph, fast_targeted_order(upa_graph)) plt.plot(range(len(network_resilience)), network_resilience, '-r', label='Network graph') plt.plot(range(len(er_resilience)), er_resilience, '-b', label='ER-generated (p = 0.00172)') plt.plot(range(len(upa_resilience)), upa_resilience, '-g', label='UPA-generated (m = 2)') plt.title('Comparison of Networks Resilience') plt.ylabel('Size of the largest connected component') plt.xlabel('Number of nodes removed') plt.legend() plt.show() #question4()
def question4(): NETWORK_URL = "http://storage.googleapis.com/codeskulptor-alg/alg_rf7.txt" network_graph = app2.load_graph(NETWORK_URL) network_idd = prj1.in_degree_distribution(network_graph) network_nodes = sum(network_idd.values()) network_edges = sum([x * y for (x, y) in network_idd.iteritems()]) / 2 network_prob = float(network_edges) / network_nodes / (network_nodes - 1) print "Network_nodes", network_nodes print "Network_edges", network_edges print "Network_prob", network_prob print "Network_m", network_edges /float(network_nodes) er_graph = er_makegraph(1347, 0.00172) er_idd = prj1.in_degree_distribution(er_graph) er_nodes = sum(er_idd.values()) er_edges = sum([x * y for (x, y) in er_idd.iteritems()]) / 2 print "ER_nodes", er_nodes print "ER_edges", er_edges upa_graph = upa_makegraph(1347, 2) upa_idd = prj1.in_degree_distribution(upa_graph) upa_nodes = sum(upa_idd.values()) upa_edges = sum([x * y for (x, y) in upa_idd.iteritems()]) / 2 print "UPA_nodes", upa_nodes print "UPA_edges", upa_edges network_resilience = prj2.compute_resilience(network_graph, fast_targeted_order(network_graph)) er_resilience = prj2.compute_resilience(er_graph, fast_targeted_order(er_graph)) upa_resilience = prj2.compute_resilience(upa_graph, fast_targeted_order(upa_graph)) plt.plot(range(len(network_resilience)), network_resilience, '-r', label='Network graph') plt.plot(range(len(er_resilience)), er_resilience, '-b', label='ER-generated (p = 0.00172)') plt.plot(range(len(upa_resilience)), upa_resilience, '-g', label='UPA-generated (m = 2)') plt.title('Comparison of Networks Resilience') plt.ylabel('Size of the largest connected component') plt.xlabel('Number of nodes removed') plt.legend() plt.show() #question4()