两个节点之间所有路径的速度非常快

时间:2013-02-06 23:33:30

标签: python graph nodes

我是python编码的新手,我正在寻找一种算法,可以快速找到一个非常大的图形的起始节点和结束节点之间的所有路径 - 比如一个有大约1000个节点和10,000个边缘的图形。从起始节点到结束节点实际存在的路径数很少 - 十个或更少。为了帮助提高问题的背景,考虑一个社交网络 - 如果我有1000个朋友,我想知道我的好朋友从高中到大学的室友有多少方式,我不在乎我的事实高中最好的朋友与我所有的200名高中朋友联系在一起,因为那些路径从未通向我的室友。我想用这个python代码做的很快就是我的两个朋友之间存在的路径的子集,并且基本上摆脱了这两个节点周围存在的所有“噪音”。

我试图实现一些代码示例,所有这些代码都适用于小而简单的图形。但是,当我尝试将它们纳入我的大图分析时,它们都需要很长时间才能发挥作用。

你们对调查方法有什么建议吗(即已经在networkx中创建的东西,甚至是使用堆栈与递归等信息...),要实现的代码示例,甚至是python之外的其他路由去探求?请记住,我是一个蟒蛇新手。

2 个答案:

答案 0 :(得分:4)

也许您想要两个节点之间的所有简单(无重复节点)路径? NetworkX具有基于深度优先搜索的功能。见http://networkx.github.com/documentation/development/reference/generated/networkx.algorithms.simple_paths.all_simple_paths.html

此处的示例显示简单路径的数量可能很大:

>>> import networkx as nx
>>> G = nx.complete_graph(4)
>>> for path in nx.all_simple_paths(G, source=0, target=3):
...     print(path)
...
[0, 1, 2, 3]
[0, 1, 3]
[0, 2, 1, 3]
[0, 2, 3]
[0, 3]

答案 1 :(得分:1)

就我个人而言,我建议使用图形数据库。想起Neo4j或Rexter。

从Python访问这些时,可以使用一些库:

虽然编写快速/可扩展的Python版本并不是不可能的,但据我所知,目前还没有一个版本。