Skip to content

Commit d5760a1

Browse files
authored
Merge pull request #2 from dkorduban/add_edge_constant_time
Make graph.add_edge run in O(1) instead of O(degree(V))
2 parents aaace7e + 9fb4763 commit d5760a1

2 files changed

Lines changed: 6 additions & 6 deletions

File tree

core/pygraph/classes/graph.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def neighbors(self, node):
7878
@rtype: list
7979
@return: List of nodes directly accessible from given node.
8080
"""
81-
return self.node_neighbors[node]
81+
return list(self.node_neighbors[node])
8282

8383
def edges(self):
8484
"""
@@ -118,7 +118,7 @@ def add_node(self, node, attrs=None):
118118
if attrs is None:
119119
attrs = []
120120
if (not node in self.node_neighbors):
121-
self.node_neighbors[node] = []
121+
self.node_neighbors[node] = set()
122122
self.node_attr[node] = attrs
123123
else:
124124
raise AdditionError("Node %s already in graph" % node)
@@ -143,9 +143,9 @@ def add_edge(self, edge, wt=1, label='', attrs=[]):
143143
"""
144144
u, v = edge
145145
if (v not in self.node_neighbors[u] and u not in self.node_neighbors[v]):
146-
self.node_neighbors[u].append(v)
146+
self.node_neighbors[u].add(v)
147147
if (u != v):
148-
self.node_neighbors[v].append(u)
148+
self.node_neighbors[v].add(u)
149149

150150
self.add_edge_attributes((u,v), attrs)
151151
self.set_edge_properties((u, v), label=label, weight=wt)

tests/unittests-graph.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def test_raise_exception_when_edge_added_from_non_existing_node(self):
7070
pass
7171
else:
7272
fail()
73-
assert gr.node_neighbors == {0: [], 1: []}
73+
assert gr.node_neighbors == {0: set(), 1: set()}
7474

7575
def test_raise_exception_when_edge_added_to_non_existing_node(self):
7676
gr = graph()
@@ -81,7 +81,7 @@ def test_raise_exception_when_edge_added_to_non_existing_node(self):
8181
pass
8282
else:
8383
fail()
84-
assert gr.node_neighbors == {0: [], 1: []}
84+
assert gr.node_neighbors == {0: set(), 1: set()}
8585

8686
def test_remove_node(self):
8787
gr = testlib.new_graph()

0 commit comments

Comments
 (0)