ベッドルームで群論をの話。
いくつかある正の整数を2群に分けたい。
条件は、2群の要素の総和が等しい、ということで久々にスクリプトを作成する。
# 本に出ていた、分割の仕方がただ1通りしかないやつ。 a<- c(771,121,281,854,885,734,468,1003,83,62) a # もし、違うことをしてみたければ #set.seed(11) #a<- sample(1:100,size=12) #a # 総和が奇数だと都合が悪いので if(sum(a)%%2!=0){ a<- append(a,1) } # 群の分け方としては、1と-1で区別する。 # すべての分け方を地味に発生させる。 # 行について足して、和をみる。 bit<- list() for(i in 1:length(a)){ bit<- c(bit,list(c(1,-1))) } sequence<- t(as.matrix(expand.grid(bit))) #sequence Seq<- sequence[,head(g,length(g)/2)] g<- Gg<- which(colSums(sequence*a)==0) Dev<- lapply(mapply(rep,0,1:(length(g)/2)),unique) for(G in 1:length(Dev)){ G1<- a[which(sequence[,g[G]]== 1)] G2<- a[which(sequence[,g[G]]==-1)] Dev[[G]]<- list(G1,G2) } Dev # 確認してみる。 for(d in 1:length(Dev)){ print(lapply(Dev[[d]],sum)) }