查找图表

时间:2016-08-02 09:40:15

标签: r igraph

对于中等大小(~50个节点,平均度数:~4),无向,未加权的图形,我想使用R枚举两个节点i和j之间指定长度的所有可能路径。

包igraph提供all_simple_paths,我可以使用它,然后简单地将结果子集化为我想要的长度的路径。然而,问题在于all_simple_paths默认情况下还列举了所有可能更长的路径,这需要数小时,即使对于相当小的网络也是如此。

我知道在SO上有几个非常相似的问题,但不是R的非特定问题,更重要的是不比igraph all_simple_paths更新。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你不希望ij之间的所有可能路径,而只是最短路径 - 是吗?

您可以使用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

我希望这会有所帮助。