Skip to content
Snippets Groups Projects
Commit 67a38da0 authored by Radek Hušek's avatar Radek Hušek
Browse files

groupConnectivityNaive: small optimizations

parent 29532439
Branches
No related tags found
No related merge requests found
from sage.graphs.graph import Graph, DiGraph
def flowEnumerator(G, group): def flowEnumerator(G, group):
"""Enumerate all flows of given graph. """Enumerate all flows of given graph.
...@@ -33,7 +35,7 @@ def flowEnumerator(G, group): ...@@ -33,7 +35,7 @@ def flowEnumerator(G, group):
yield tuple(v) yield tuple(v)
def testGroupConnectivityNaive(G_, group, forb_spanning_tree = False, def testGroupConnectivityNaive(G_, group, forb_spanning_tree = True,
list_all = False, counts = False): list_all = False, counts = False):
E = [ (u, v, i) for i, (u, v, _) in enumerate(G_.edges()) ] E = [ (u, v, i) for i, (u, v, _) in enumerate(G_.edges()) ]
G = DiGraph([G_.vertices(), E], format='vertices_and_edges') G = DiGraph([G_.vertices(), E], format='vertices_and_edges')
...@@ -61,7 +63,7 @@ def testGroupConnectivityNaive(G_, group, forb_spanning_tree = False, ...@@ -61,7 +63,7 @@ def testGroupConnectivityNaive(G_, group, forb_spanning_tree = False,
mask[e] = None mask[e] = None
def is_compatible(f, x): def is_compatible(f, x):
for i in range(m): for i in xrange(m):
if f[i] == x[i]: if f[i] == x[i]:
return False return False
return True return True
...@@ -90,9 +92,8 @@ def testGroupConnectivityNaive(G_, group, forb_spanning_tree = False, ...@@ -90,9 +92,8 @@ def testGroupConnectivityNaive(G_, group, forb_spanning_tree = False,
return False return False
else: else:
def find_flow(forb): def find_flow(forb):
c = len(filter(lambda f: is_compatible(f, forb), flows)) C[forb] = filter(lambda f: is_compatible(f, forb), flows)
C[forb] = c return (len(C[forb]) > 0)
return (c > 0)
ret = [] ret = []
...@@ -100,7 +101,7 @@ def testGroupConnectivityNaive(G_, group, forb_spanning_tree = False, ...@@ -100,7 +101,7 @@ def testGroupConnectivityNaive(G_, group, forb_spanning_tree = False,
if not find_flow(forb): if not find_flow(forb):
if not list_all: if not list_all:
return (False, info, [forb]) return (False, info, [forb])
ret.append(list(forb)) ret.append(forb)
return (len(ret) == 0, info, ret) return (len(ret) == 0, info, ret)
...@@ -108,4 +109,14 @@ def labelsFromArray(G, E, labels): ...@@ -108,4 +109,14 @@ def labelsFromArray(G, E, labels):
for (u, v, i) in E: for (u, v, i) in E:
G.set_edge_label(u, v, labels[i]) G.set_edge_label(u, v, labels[i])
def dictMap(f, d):
return { k: f(v) for k, v in d.iteritems() }
def myHistogram(data):
s = dict()
for i in data:
if i not in s:
s[i] = 0
s[i] += 1
return s
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment