[問題] 重複組合

作者: 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