多項格子
grid.multinom<-function(L,k){ ret<-list() if(k==1){ ret[[1]]<-c(L) }else{ cnt<-1 for(i in 0:L){ tmp<-grid.multinom(L-i,k-1) for(j in 1:length(tmp)){ ret[[cnt]]<-c(i,tmp[[j]]) cnt<-cnt+1 } } } ret } grid.multinom(4,1)
- もちろん、高次元になるとすごく重いのだが、3次元くらいで1辺が短いものや、「頂点付近」に限定すれば、まあ、動く
# 周辺部分だけ作ろう LLL<-list() minL<-990 L<-1000 k<-3 cnt<-1 for(i in minL:L){ tmp<-grid.multinom(L-i,k-1) for(j in 1:length(tmp)){ LLL[[cnt]]<-c(i,tmp[[j]]) cnt<-cnt+1 } } LLL