1
接続されたコンポーネントの一部であることが知られている無向グラフのノードxを考えると、私はxのコンポーネントに属するすべてのノードを探します。Rの無向グラフの高速接続されたコンポーネントの識別R
私の現在の実装では、無向グラフのすべてのコンポーネントを識別しているため、大きなグラフでは不十分です。私は現在、ggmライブラリのconnectedCompを使ってこれを行っていますが、ノードxからRBGLからBFSを実行し、コンポーネントが完全に探索されると終了します。これを行う方法に関する提案はありますか?また、Rから呼び出すことができる並列グラフアルゴリズムの実装についての情報は高く評価されます。 Union-findと私の意見の前処理グラフで
library("ggm")
x <- 2
> graph
1 2 3 4 5 6 7 8 9 10
1 0 0 0 0 0 0 0 0 0 0
2 0 0 1 0 0 1 0 0 0 0
3 0 1 0 0 0 1 1 1 0 0
4 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0
6 0 1 1 0 0 0 0 0 0 0
7 0 0 1 0 0 0 0 0 0 0
8 0 0 1 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0
10 0 0 0 0 0 0 0 0 0 0
graph_object <- as(graph, "graphNEL")
# All connected components of graph using connectedComp function:
comp_list <- connectedComp(graph_object)
> comp_list
$`1`
[1] "1"
$`2`
[1] "2" "3" "6" "7" "8"
$`3`
[1] "4"
$`4`
[1] "5"
$`5`
[1] "9"
$`6`
[1] "10"
# Extract adjacency matrix of component containing x:
comp_x <- seq_along(comp_list)[sapply(comp_list, FUN=function(list) x %in% list)]
> comp_x
[1] 2
comp_x_list <- comp_list[[comp_x]]
> comp_x_list
[1] "2" "3" "6" "7" "8"
comp_x <- graph[comp_x_list, comp_x_list]
> comp_x
2 3 6 7 8
2 0 1 1 0 0
3 1 0 1 1 1
6 1 1 0 0 0
7 0 1 0 0 0
8 0 1 0 0 0
実行BFSをお読みください、そして、それはそう難しいことではありません。 –
確かに、問題はBoostの高速実装がC++を呼び出すからです。 – SAT
また、私はこの問題の大規模並列実装を次のようなスタイルで探しています:www.aaai.org/Papers/AAAI/.../AAAI05-219.pdf – SAT