[问题] 重复组合

楼主: swedrf0112 (M)   2014-04-17 15:51:37
文章分类提示:问题
[问题类型]:程式咨询
[软件熟悉度]:入门
[问题叙述]:
想要写一个重复组合的程式,可以将所有可能的结果列出来
例如: 求x+y+z=25的正整数解
我能想到的就只有利用3个for及if即可把所有可能全部列出来
但我需要的是给定n个x,以及加总的数目,即以下状况:
x1+x2+...+xn=k,因此若用for的话会有n个for。
使用for及if的程式如下:
q=0
result=matrix({0},nrow=351,ncol=3)
for ( i in 0:25 )
{
for ( j in 0:25 )
{
for (k in 0:25 )
{
if( i+j+k==25 )
{
q=q+1
result[q,]=c(i,j,k)
}
}
}
}
另外一问,有方法将新列出的可能自动加进新列吗?
这样就不需给定nrow的值了XD
谢谢各位!
[关键字]:重复组合
作者: h0h1 (小羊班13号)   2014-04-17 18:09:00
我不确定 package "partitions" 对你会不会有帮助
作者: celestialgod (天)   2014-04-17 19:38:00
M = expand.grid(0:25,0:25,0:25)M_sub = M[rowSums(M) == 25,]M_sub就是其解如果n个就expand.grid 好几个 把解空间延展出去只是这方法 n太大可能就没办法做了
楼主: swedrf0112 (M)   2014-04-17 22:17:00
对,而且这样如果x1~x10 就要写expand.grid(0:25...)里面的0:25要写10个,这样有点太麻烦了XD不过还是谢谢你!!
作者: celestialgod (天)   2014-04-17 23:12:00
可是你写回圈写十层不烦吗XD如果x1~x10范围一样,可以用回文的方法可以不用设定nrow就牺牲效率而已

Links booklink

Contact Us: admin [ a t ] ucptt.com