- n個の要素があって、そのすべてが1つ以上の単体に属するものとして、何通りの複体が存在するかを考えてみる
- のときはの1通り
- のときはの2通り
- のときは,,,,の9通り
- のときは、114通りらしい
- のときは、『とても多い』らしい
- 何かうまい計算方法はないのだろうか?
- ひとまず、Rでべたべたに「すべての場合」を考えて数え上げてみる
- これを使って、の場合に114ということが分かった
- 1,2,9,114を使ってオンライン数列大辞典を検索してみたら、数列ID:A006126 "Number of hierarchical models with linear terms forced. Also number of antichain covers of a labeled n-set"のようだ。
- 1, 2, 9, 114, 6894, 7785062, 2414627396434, 56130437209370320359966
- 関係すること、ひとまずリンク
library(sets)
set2complex <- function(s){
if(length(s)==1){
return(s)
}else{
Subs<-outer(s,s,FUN="set_is_proper_subset")
diag(Subs)<-FALSE
ret <- abs(sign(apply(Subs,1,sum))-1)
return(s[which(ret==1)])
}
}
c1 <- set2complex(list(as.set(1),as.set(c(1,3)),as.set(c(1,4)),as.set(c(2,4))))
c1
complex2set <- function(t){
tmp <- lapply(t,set_power)
if(length(tmp) == 1){
return(tmp[[1]])
}else{
ret <- tmp[[1]]
for(i in 2:length(tmp)){
ret <- set_union(ret,tmp[[i]])
}
return(ret)
}
}
s1 <- complex2set(c1)
s1
set2unique <- function(s){
if(length(s)==1){
return(s)
}else{
Subs<-outer(s,s,FUN="set_is_equal")
Subs[upper.tri(Subs)] <- FALSE
ret <- apply(Subs,1,sum)
return(list(s = s[which(ret==1)],id = ret))
}
}
n <- 4
c.list <- list()
c.list[[1]] <- list(as.set(1L))
cnt.list <- 2
sedai.oya <- matrix(c(1,0),byrow=TRUE,ncol=2)
for(i in 2:n){
pre.sedai <- which(sedai.oya[,1] == i-1)
for(j in 1:length(pre.sedai)){
tmp <- c.list[[pre.sedai[j]]]
tmp.set <- complex2set(tmp)
n.elem <- length(tmp.set)
cnt <- rep(0,n.elem)
cnt[1] <- 1
tmp.list <- list()
for(k in 1:(2^n.elem-1)){
this.set <- list()
elem.cnt <- 1
for(l in tmp.set){
if(cnt[elem.cnt] == 0){
this.set[[elem.cnt]] <- l
}else{
this.set[[elem.cnt]] <- l + i
}
elem.cnt <- elem.cnt + 1
}
cnt[1] <- cnt[1]+1
for(l in 1:(n.elem-1)){
if(cnt[l] == 2){
cnt[l] <- 0
cnt[l+1] <- cnt[l+1] + 1
}
}
tmp.list[[k]] <- set2complex(this.set)
}
tmp.list2 <- set2unique(tmp.list)
for(k in 1:length(tmp.list2$s)){
c.list[[cnt.list]] <- tmp.list2$s[[k]]
sedai.oya <- rbind(sedai.oya,c(i,pre.sedai[tmp.list2$id[j]]))
cnt.list <- cnt.list + 1
}
}
}
table(sedai.oya[,1])