Re: [問題] 重複組合

作者: celestialgod (天)   2014-04-17 23:25:04
不想打十次就用一些取巧的方法...
x = 0:5; d = 10
str = paste(rep("x",d), collapse = ",")
M = eval(parse(text=paste0("expand.grid(", str, ")")))
a = M[rowsum(M)==5, ]
只是這樣的做法有 效能跟記憶體瓶頸
要有更有效率的做法要找package...
不過這種方法在d小的時候非常快XDDD
PS: 取subset可以參考前面幾篇有關data.table的討論
※ 引述《swedrf0112 (M)》之銘言:
: 文章分類提示:問題
: [問題類型]:程式諮詢
: [軟體熟悉度]:入門
: [問題敘述]:
: 想要寫一個重複組合的程式,可以將所有可能的結果列出來
: 例如: 求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
: 謝謝各位!
: [關鍵字]:重複組合
作者: swedrf0112 (M)   2014-04-17 23:39:00
感謝你~~ 又學到一招了XD
作者: andrew43 (討厭有好心推文後刪文者)   2014-04-17 23:55:00
我也覺得用prase就好了,管它cpu ram夠不夠力。 XD

Links booklink

Contact Us: admin [ a t ] ucptt.com