- こちらで、分割表・マルコフ基底に関する話の延長で複体が出てきた
- 表現の仕方など、こまごましたことのメモがある方がよいので、こちらにメモ
- 複体(Wiki日本版・Wiki英語版)
- 複体は、点、線、面…でできている。この点、線、面…などをfaceと言う
- 点、線、面…と「大きいface」になるが、「より大きいface」は「より小さいface」と、「より小さいfaceでは作りえない、1段階大きい1つのface」でできている
- 複体に「あるface」が含まれるときには、その「あるface」に含まれる「より小さいface」はすべて含まれることになっている
- このことから、あるfaceが複体に含まれていて、そのfaceを含む、より大きなfaceが複体に含まれていないとき、複体に含まれているface(inclusion-maximal face)をfacetと呼ぶ
- また、ある複体のfacetsを列挙すれば、複体のfacesを列挙するよりも、簡単に(〜短く)、その複体の構成を示すことができる
- Rを使って、faceを適当に選んで、そこから、facetを選び出すという作業をやってみよう
library(sets)
library(igraph)
Nv<-7
Vs<-1:Nv
Nf<-4
Faces<-list()
maxN<-3
Ns<-sample(1:maxN,Nf,replace=TRUE)
for(i in 1:Nf){
tmpVs<-sample(Vs,Ns[i])
Faces[[i]]<-as.set(tmpVs)
}
Subs<-outer(Faces,Faces,FUN="set_is_proper_subset")
diag(Subs)<-FALSE
tmp.facets<-abs(sign(apply(Subs,1,sum))-1)
Faces2<-list()
cnt<-1
for(i in 1:length(tmp.facets)){
if(tmp.facets[i]==1){
Faces2[[cnt]]<-Faces[[i]]
cnt<-cnt+1
}
}
Facets<-as.set(Faces2)
Faces
Faces2
Facets
for (i in Facets) print(i)
Xs<-Ys<-rep(0,Nv)
Xs<-runif(Nv)
Ys<-runif(Nv)
xlim<-range(Xs)
ylim<-range(Ys)
plot(Xs,Ys,col=0,xlim=xlim,ylim=ylim)
for(i in Facets){
tmpPower<-set_power(i)
for(j in tmpPower){
tmp<-c()
for(k in j){
tmp<-c(tmp,k)
}
print(tmp)
if(length(tmp)==1){
points(Xs[tmp],Ys[tmp])
}else if(length(tmp)==2){
segments(Xs[tmp[1]],Ys[tmp[1]],Xs[tmp[2]],Ys[tmp[2]])
}
}
}
E<-matrix(0,Nv,Nv)
for(i in Facets){
tmp<-c()
for(j in i){
tmp<-c(tmp,j)
}
for(j in 1:(length(tmp)-1)){
for(k in (j+1):length(tmp)){
E[tmp[j],tmp[k]]<-E[tmp[k],tmp[j]]<-1
}
}
}
g<-graph.adjacency(E,mode="undirected")
plot(g,layout=layout.circle)