作者swedrf0112 (M)
看板R_Language
标题[问题] 重复组合
时间Thu Apr 17 15:51:37 2014
文章分类提示:问题
[问题类型]:程式谘询
[软体熟悉度]:入门
[问题叙述]:
想要写一个重复组合的程式,可以将所有可能的结果列出来
例如: 求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
谢谢各位!
[关键字]:重复组合
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.170.52.33
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/R_Language/M.1397721100.A.5A9.html
※ 编辑: swedrf0112 (118.170.52.33), 04/17/2014 17:08:24
※ 编辑: swedrf0112 (118.170.52.33), 04/17/2014 17:10:29
1F:→ h0h1:我不确定 package "partitions" 对你会不会有帮助 04/17 18:09
2F:→ celestialgod:M = expand.grid(0:25,0:25,0:25) 04/17 19:38
3F:→ celestialgod:M_sub = M[rowSums(M) == 25,] 04/17 19:38
4F:→ celestialgod:M_sub就是其解 04/17 19:38
5F:→ celestialgod:如果n个就expand.grid 好几个 把解空间延展出去 04/17 19:40
6F:→ celestialgod:只是这方法 n太大可能就没办法做了 04/17 19:40
7F:→ swedrf0112:对,而且这样如果x1~x10 就要写expand.grid(0:25...) 04/17 22:17
8F:→ swedrf0112:里面的0:25要写10个,这样有点太麻烦了XD 04/17 22:18
9F:→ swedrf0112:不过还是谢谢你!! 04/17 22:18
10F:→ celestialgod:可是你写回圈写十层不烦吗XD 04/17 23:12
11F:→ celestialgod:如果x1~x10范围一样,可以用回文的方法 04/17 23:13
12F:→ celestialgod:可以不用设定nrow就牺牲效率而已 04/17 23:25