In [76]:
from networkit import *

In [87]:
G = readGraph("input/karate.graph", Format.METIS)

In [88]:
# All dynamic algorithms (starting with "Dyn") have a run(), an update() 
# and an updateBatch() method. We start by calling run() on the initial graph
dynBC = centrality.DynBetweenness(G)
dynBC.run()
dynBC.ranking()[:10]


Out[88]:
[(0, 462.1428571428572),
 (33, 321.1031746031746),
 (32, 153.38095238095238),
 (2, 151.70158730158732),
 (31, 146.0190476190476),
 (8, 59.058730158730164),
 (1, 56.95714285714285),
 (13, 48.43174603174603),
 (19, 34.2936507936508),
 (5, 31.666666666666668)]

In [89]:
# returns a new random edge for G
def newEdge(G):
    u = G.randomNode()
    v = G.randomNode()
    while G.hasEdge(u, v):
        u = G.randomNode()
        v = G.randomNode()
    return u, v

In [90]:
u, v = newEdge(G)
print("Adding edge ", u, v)
# we add the edge to the graph
G.addEdge(u, v)
# we create an event and update the BC scores
ev = dynamic.GraphEvent(dynamic.GraphEvent.EDGE_ADDITION, u, v, 1.0)
dynBC.update(ev)


Adding edge  32 11

In [91]:
dynBC.ranking()[:10]


Out[91]:
[(0, 432.3172161172163),
 (33, 306.32326007326026),
 (32, 184.89377289377305),
 (2, 143.29816849816854),
 (31, 134.52289377289387),
 (1, 54.82124542124542),
 (8, 47.81428571428571),
 (13, 43.44285714285715),
 (5, 31.66666666666667),
 (6, 31.666666666666664)]

In [92]:
# we now create a batch of edges
k = 5
batch = []
for i in range(k):
    u, v = newEdge(G)
    batch.append(dynamic.GraphEvent(dynamic.GraphEvent.EDGE_ADDITION, u, v, 1.0))

In [93]:
# we update the graph with the batch of edge insertions
for ev in batch:
    G.addEdge(ev.u, ev.v)
# we update the betweenness scores
dynBC.updateBatch(batch)

In [94]:
dynBC.ranking()[:10]


Out[94]:
[(33, 339.35529307294075),
 (0, 322.1977943625002),
 (32, 153.37354279707236),
 (2, 116.56637349578529),
 (31, 111.78596762714419),
 (1, 81.99598506069093),
 (16, 48.585858585858574),
 (13, 29.837155001860843),
 (8, 27.68057661292953),
 (27, 23.333420174596636)]

In [ ]: