- グラフのペアワイズ最短距離が出したいことがある
- 密グラフならWarshall-Floyd、疎グラフならJonhsonが効率的という(参考)
- RのigraphパッケージもRGBLパッケージも最短距離は計算してくれるのだが、Warshall-Floydの行列が欲しい(どうしてほしくなるかはここでは問わないとして…)とすると、それを返してくれるわけではなく、WFとJohnsonのどちらが効率的かを判断して、よい方で計算して返してくれるらしいので、探し物をした
- e1071という膨大な関数のパッケージにWF行列を返してくれる関数 allShortestPaths() があったので、メモ
library(e1071)
library(igraph)
my.WarshallFloyd <- function(g,w){
v <- V(g)
E(g)$weight <- w
d <- as_adjacency_matrix(g,attr="weight")
d <- as.matrix(d)
d[which(d==0)] <- NA
sh <- allShortestPaths(d)
return(sh)
}
sh <- my.WarshallFloyd(g,w)
i <- 3
j <- 5
extractPath(sh,i,j)