クラスタリングの場合の数

  • 今、N個のサンプルがあって、これを2分岐木のクラスタに纏め上げたいとする
  • 何通りの木の形状(トポロジー)があるんだろう?
  • 漸化式で考える
    • A(N)がその数とする
    • A(1)=1,A(2)=1である
    • N >2のときを考える
      • A(1),A(2),...,A(N-1)まではわかっているとして、Nの場合を知りたいものとする
      • N(1,N-1),(2,N-2),...,(N-1,1)に分けることができる
      • それぞれが\frac{N!}{i!(N-i)!};i=1,2,...,N-1の分け方を持つ
      • i=1,2,...,N-1まで数え上げると2回ずつ数えていることになる
      • (i,N-i)の場合には、このi個の要素が作りうる2分岐木とN-i個の要素が作りうる2分岐木を取らせ得るから
      • A(N)=\frac{1}{2}\sum_{i=1}^{N-1} \frac{N!}{i!(N-i)!} \times A(i) \times A(N-i)という漸化式になるだろうか・・・
  • これを計算すると・・・A(1)=1,A(2)=1,A(3)=3,A(4)=15,A(5)=105,A(6)=945,A(7)=10395,A(8)=135135,A(9)=2027025,A(10)=34459425
numTreeTopology<-function(n=3){
 tmp<-rep(0,n)
 if(n==1){
  tmp[1]<-1
 }else if(n==2){
  tmp[1]<-1
  tmp[2]<-1
 }else{
  tmp<-rep(0,n)
  tmp[1]<-1
  tmp[2]<-1
  for(i in 3:n){
   for(j in 1:(i-1)){
    tmp[i]<-tmp[i]+choose(i,j)*tmp[j]*tmp[i-j]/2
   }
  }
  
 }
 tmp
}
> numTreeTopology(n=10)
 [1]        1        1        3       15      105      945    10395   135135  2027025 34459425
>