我在这里有一段代表性的代码,我一直在努力检查图中的平行边。看它目前的形式是非常人为的......我需要帮助的只是算法,这是一个缓慢的O(n ^ 2)(尽我所知),字符串比较算法。
真实的图形是成千上万的边缘。我想知道是否有更快的方法来做到这一点。请注意我创建的并行边的特殊情况,它表明需要所有字符串检查逻辑。
class graph_edge:
def __init__(self, node1, node2):
self.node1 = node1
self.node2 = node2
def __str__(self):
return '%s <-> %s' % (self.node1, self.node2)
graph_edges = [graph_edge(('a-1','b-1'),('c-1','d-1')), graph_edge(('e-1','f-1'),('g-1','h-1')), graph_edge(('c-1','d-1'),('a','1-b-1'))]
# check list of edges for any that are parallel
num_deleted = 0
for x, a in enumerate(graph_edges):
for y, b in enumerate(graph_edges[0:x]):
if ( ( ( '%s-%s' % a.node1 == '%s-%s' % b.node1 ) and
( '%s-%s' % a.node2 == '%s-%s' % b.node2 ) ) or
( ( '%s-%s' % a.node1 == '%s-%s' % b.node2 ) and
( '%s-%s' % a.node2 == '%s-%s' % b.node1 ) ) ):
print '(%s) and (%s) are parallel' % (a, b)
del graph_edges[x]
num_deleted += 1
print '%s parallel edges were found' % ( num_deleted if num_deleted else 'no' )
答案 0 :(得分:0)
您可以在
之前轻松使用Hash来检查它是否存在UPD1
您可以使用dict()
。对于边e
,首先检查它是否存在于dict()
中,然后将其放入dict()
字典是通过哈希方法实现的