作者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/m.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