那么让我们说我有几个节点。每个节点都有一个可以访问的节点列表。该节点列表可以包括其自身。我需要做的是构建一个节点可以采用n长度的所有可能路径。
例如:让我们假设一些事情。
假设我可以构建的所有路径都是:
这是我现在的代码;它工作,但在我的实际情况下,我需要八个长的路径与相当多的节点。这显然会导致一些性能问题。我遇到了在32位版本的Python2.7上运行的MemoryError。我还没有尝试64位版本。目前明显的问题是我目前的实施。我想也许使用产量/发电机会有所帮助。是吗?如果是这样,我怎么能在我的情况下使用收益率来实现?
此外,如果Python 3具有一些可以实现我所要求的功能,我不仅限于Python 2。 Python 2恰好就是我性能最佳的计算机上的内容。
PARTS = 3
def dive(node, depth=0):
combos = []
if depth >= PARTS - 1:
if node.key:
return ((node.key,),)
return ()
for next_ in node.next_nodes:
for combo in dive(next_, depth=depth+1):
if not node.key:
continue
combos.append((node.key,) + combo)
return combos
答案 0 :(得分:0)
你可以通过将返回调用更改为yield来将当前解决方案转换为生成器最简单的方法......这可能已经足够......它可能也不会......还有一些图形遍历库可以解决如果你的目标只是解决问题,那就非常好了
PARTS = 3
def dive(node, depth=0):
combos = []
if depth >= PARTS - 1:
if node.key:
#return ((node.key,),)
yield ((node.key,),)
#return ()
yield ()
for next_ in node.next_nodes:
for combo in dive(next_, depth=depth+1):
if not node.key:
continue
combos.append((node.key,) + combo)
#return combos
yield combos
for result in dive(node):
print result