首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python-networkx发现两个图中的公共路径

使用python-networkx发现两个图中的公共路径
EN

Stack Overflow用户
提问于 2022-06-24 10:27:15
回答 1查看 88关注 0票数 0

我有两个DiGraphs,比方说G和H,我想数一数G的多少条路径是H的一部分。

对于任何节点对(src,dst),我可以使用“all_simple_paths”函数来生成它们之间的路径: G_gen = nx.all_simple_paths(G,src,dst) H_gen = nx.all_simple_paths(H,src,dst)

由于路径的数量相当高(图通常有100个节点),所以我不能求助于构建列表等等。(例如,列表(G_gen))所以我想知道是否有更明智的方法来处理它。此外,我还想根据路径长度来区分。

。。或者用不同的模块可以找到更好的解决方案?

谢谢您在这方面的任何帮助。

蒂埃里

EN

回答 1

Stack Overflow用户

发布于 2022-06-29 21:21:06

我想知道为什么nx.intersection (请看这里)不能在这里工作吗?我不确定它是否检查引擎盖下的方向,但它似乎也没有强制输出到标准的Graph输出。以下可能有效:

代码语言:javascript
复制
# Create a couple of random preferential attachment graphs
G = nx.barabasi_albert_graph(100, 5)
H = nx.barabasi_albert_graph(100, 5)

# Convert to directed
G = G.to_directed()
H = H.to_directed()

# Get intersection
intersection = nx.intersection(G, H)

# Print info for each
print(nx.info(G))
print(nx.info(H))
print(nx.info(intersection))

其中产出:

代码语言:javascript
复制
>>> DiGraph with 100 nodes and 950 edges
>>> DiGraph with 100 nodes and 950 edges
>>> DiGraph with 100 nodes and 176 edges

该示例中的节点都是共享的,因为节点in只是简单的整数,因此它们遵循相同的生成索引。对于实际数据,我认为您的节点集可能与这里不同,您可能也会看到那里的差异。

在这条路上,我不太确定你会怎么做。交集只检查两个图之间共享哪些节点和边,并返回两个图中的节点和边,而不知道我怀疑的任何其他条件。可能有一种方法可以通过使用带有条件检查的交集函数的源代码来施加一些额外的约束。

我想这不是检查edges,路径的数量,而是检查 path 的数量,所以我想您正在寻找比这更具体的东西。但是至少没有路径可以存在于交集之外,因为所有共享路径都必须包含两个路径中的相同边缘(因为如果在这两条路径中的路径中都缺少边缘,那么在共享解决方案中它就不能作为路径存在)。

希望这能在某种程度上对你的问题有所帮助,尽管我觉得我把你的问题简单化了很多。

编辑:直观地说,你的问题的全部解决方案可能是简单地列举出交叉口中所有可能的路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72742661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档