最小全域木

  • パッケージveganのspantree()関数は、距離行列を引数として、最小全域木を返す
# 点はk次元空間
# 描図は2次元
library(vegan)
Npt<-100
k<-4
X<-matrix(0,Npt,k)
for(i in 2:Npt){
	X[i,]<-X[i-1,]+rnorm(k)
}
MST<-spantree(dist(X))
plot(X[,1:2])
# MST[[1]]は2:Npt番ノードの子ノードIDなので
# 以下でエッジを引くことができる
As<-2:Npt
Bs<-MST[[1]]
segments(X[As,1],X[As,2],X[Bs,1],X[Bs,2],col=2)

# エッジの長さの和
sum(MST[[2]])
  • for()を使わない案はこちら(乱数は一度に発生する方が速い)
  • for()は…「プロセス」を追いかけている姿だから好き(後から読み返して、何をしたかったかがわかりやすい)