10

我对 python 编码非常陌生,我正在寻找一种算法,它可以快速找到一个非常大的图的起始节点和结束节点之间的所有路径 - 比如说一个有大约 1000 个节点和 10,000 条边的图。从开始节点到结束节点实际存在的路径数量很少 - 十个或更少。为了帮助更多地了解这个问题,考虑一个社交网络——如果我有 1000 个朋友,我想知道我高中最好的朋友有多少种方式与我大学室友联系,我不在乎我的高中最好的朋友与我所有的 200 个高中朋友都有联系,因为这些路径永远不会通向我的室友。我想用这个 python 代码做的是快速子集我的两个朋友之间存在的路径,并基本上摆脱所有的“噪音”

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

你们是否都有任何关于调查方法的建议(即,已经在 networkx 中创建的东西,甚至是关于使用堆栈与递归等的信息等)、要实现的代码示例,甚至是 python 之外的其他路线要追求?请记住,我是 python 新手。

4

2 回答 2

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]
于 2013-02-08T19:12:28.390 回答
1

我个人建议为此使用图形数据库。Neo4j 或 Rexter 浮现在脑海中。

从 Python 访问这些时,有几个库可用:

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

于 2013-02-06T23:43:03.150 回答