- 昨日の続き
- 昨日は、亜集合を要素とする集合が2つあったときに、その包含関係を測る話だった
- 今日は、亜集合の要素がグラフ上のノードにあるとして、包含関係(0,1の関係)から量的な関係に広げる話
- 以下で定める「距離」の定め方はあくまでも一つのやり方なので、拡張・変更・検討に値する(が処理の手順はこれでよいだろう)
- なぜ、包含関係ではなくて、「包含関係を0(最短距離)」とした測度を持ち込むか、というと、「確たること(0)」と、それに近いことを「連想する」という手続きを持ち込みたいから
s <- s.list[[1]]
d <- d.list[[1]]
dist.btwn.node.sets <- function(g,s,d,weights = NULL){
sh.pts <- sh.paths.btwn.lists(g,s,d,weights = NULL)
min.sh.pts1 <- apply(sh.pts,1,min)
min.sh.pts2 <- apply(sh.pts,2,min)
max.min.sh.pts1 <- max(min.sh.pts1)
max.min.sh.pts2 <- max(min.sh.pts2)
return(list(d1 = max.min.sh.pts1,d2 = max.min.sh.pts2,d.vector1 = min.sh.pts1,d.vector2 = min.sh.pts2,d.matrix = sh.pts))
}
- 上の定義を使って、昨日の「包含関係」の情報を拡張する
- 包含関係は、sのすべてのノードについて、dのノードへの最短距離を計算し、その中の最小値をとり、その最小値をsのすべてのノードについて評価して、最大値を取ったときに、0であるなら、それを「sはdに包含される」と言った
- 今、この0:包含を拡張して、値を取らせることで、「包含までに必要な距離」を出している
n.v <- 20
s.list <- list()
s.list[[1]] <- sample(1:n.v,3)
s.list[[2]] <- sample(1:n.v,3)
s.list[[3]] <- sample(1:n.v,3)
d.list <- list()
d.list[[1]] <- sample(1:n.v,8)
d.list[[2]] <- sample(1:n.v,7)
dist.btwn.node.sets(g,s,d)
diff.dig2 <- function(s.list,d.list,g,weight = NULL){
s.l <- lapply(s.list,unique)
d.l <- lapply(d.list,unique)
ret <- array(0,c(length(s.l),length(d.l),3))
for(i in 1:length(s.l)){
for(j in 1:length(d.l)){
tmp <- dist.btwn.node.sets(g,s.l[[i]],d.l[[j]])
ret[i,j,] <- c(length(s.l[[i]]),length(d.l[[j]]),tmp$d1)
}
}
return(ret)
}
diff.dig2(s.list,d.list,g)