焦点ノード i の中間中心性に影響を与えるノード (j、k) を特定する最良の方法を知りたいです。中間性は i を通過する j と k の間の測地線に基づくため、これを行う 1 つの方法は、ネットワーク内のすべての最短パスを取得し、i を含むパスのみを選択し、それらのパス上のノードの ID を取得することです。 . でも
library(igraph)
test <- shortest_paths(sample_gnp(200,.001),from=1)
実行に約 9 秒かかります。これは、最初のノードからのパスのみです。私が理解しているように、shortest_paths一度に1つのノードからのパスのみを計算します。iを通過する測地線だけが本当に欲しいので、これには多くの無関係な情報が含まれます。私は、媒介関数自体が、幅優先探索または他のアルゴリズムを使用してより効率的な方法でこれを行っていると想定していますが、igraph や sna のドキュメントには、これを可能にするものは何もありません。ここで車輪の再発明は避けたいと思います。
要するに、ネットワークと焦点ノード i が与えられた場合、i を含む j と k の間のすべての測地線を見つける最良の方法は何ですか?
更新:これは私が書いた機能であり、トリックを行うようです(ただし、これはまだ注意深くチェックしていません)。同点確率 .2 の 100 ノードのランダム グラフでは遅いですが、実行できないほど遅くはありません。これを行うためのより良い方法があると確信しています。
find.shortest.paths <- function(net,focus){
nodes.on.path <- vector(mode="numeric")
n <- length(V(net))
for(i in 1:n){
for(j in 1:n){
if(i != focus & j != focus){
p <- all_shortest_paths(net,i,j)
if(focus %in% (unlist(p$res))==T){
nodes.on.path <- unique(c(nodes.on.path,unlist(p$res)))
}
}
}
}
return(sort(nodes.on.path))
}
ex <- sample_gnp(100,.2)
#try e.g. node 14 as focal node
system.time(test <- find.shortest.paths(ex,focus=14))