[問題] 重複組合

看板R_Language作者 (M)時間10年前 (2014/04/17 15:51), 10年前編輯推噓0(0012)
留言12則, 3人參與, 最新討論串1/2 (看更多)
文章分類提示:問題 [問題類型]:程式諮詢 [軟體熟悉度]:入門 [問題敘述]: 想要寫一個重複組合的程式,可以將所有可能的結果列出來 例如: 求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://www.ptt.cc/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

04/17 18:09, , 1F
我不確定 package "partitions" 對你會不會有幫助
04/17 18:09, 1F

04/17 19:38, , 2F
M = expand.grid(0:25,0:25,0:25)
04/17 19:38, 2F

04/17 19:38, , 3F
M_sub = M[rowSums(M) == 25,]
04/17 19:38, 3F

04/17 19:38, , 4F
M_sub就是其解
04/17 19:38, 4F

04/17 19:40, , 5F
如果n個就expand.grid 好幾個 把解空間延展出去
04/17 19:40, 5F

04/17 19:40, , 6F
只是這方法 n太大可能就沒辦法做了
04/17 19:40, 6F

04/17 22:17, , 7F
對,而且這樣如果x1~x10 就要寫expand.grid(0:25...)
04/17 22:17, 7F

04/17 22:18, , 8F
裡面的0:25要寫10個,這樣有點太麻煩了XD
04/17 22:18, 8F

04/17 22:18, , 9F
不過還是謝謝你!!
04/17 22:18, 9F

04/17 23:12, , 10F
可是你寫回圈寫十層不煩嗎XD
04/17 23:12, 10F

04/17 23:13, , 11F
如果x1~x10範圍一樣,可以用回文的方法
04/17 23:13, 11F

04/17 23:25, , 12F
可以不用設定nrow就犧牲效率而已
04/17 23:25, 12F
文章代碼(AID): #1JJuWCMf (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1JJuWCMf (R_Language)