对于中等大小(~50个节点,平均度数:~4),无向,未加权的图形,我想使用R枚举两个节点i和j之间指定长度的所有可能路径。
包igraph提供all_simple_paths
,我可以使用它,然后简单地将结果子集化为我想要的长度的路径。然而,问题在于all_simple_paths
默认情况下还列举了所有可能更长的路径,这需要数小时,即使对于相当小的网络也是如此。
我知道在SO上有几个非常相似的问题,但不是R
的非特定问题,更重要的是不比igraph
all_simple_paths
更新。
答案 0 :(得分:0)
如果我理解你的问题,你不希望i
和j
之间的所有可能路径,而只是最短路径 - 是吗?
您可以使用igraph。{/ p>中的all_shortest_paths
功能实现此目的
假设:
require(igraph)
edges= graph.formula(A - B,
A - C,
B - C,
B - C,
C - D,
B - D,
D - E)
如果i = A且j = D(只是说):
>all_shortest_paths(edges,from="A", to="D")
$res
$res[[1]]
+ 3/5 vertices, named:
[1] A C D
$res[[2]]
+ 3/5 vertices, named:
[1] A B D
$nrgeo
[1] 1 1 1 2 0
相反,all_simple_paths
会给你更长的路径(l = 4),这是我不想要的:
> all_simple_paths(edges,from="A", to="D")
[[1]]
+ 4/5 vertices, named:
[1] A B C D
[[2]]
+ 3/5 vertices, named:
[1] A B D
[[3]]
+ 4/5 vertices, named:
[1] A C B D
[[4]]
+ 3/5 vertices, named:
[1] A C D
我希望这会有所帮助。