看板 MATLAB 關於我們 聯絡資訊
目前在matlab上遇到了些問題,所以到這個版上來請教各位, 請問若我有n個0,m個1,n與m有可能都很大,組成一個1X(n+m)的矩陣, 若我想得到所有組合,請問該怎麼做? 一開始我的想法是: n %1的數目 m %0的數目 A=[zeros(1,n) ones(1,m)] B=perms(A) C=unique(B,'rows') 但是perms裡面的值不能大於10個, 由於我的n+m一定大於10, 所以這方法就不適用了, 請問除了使用perms的方法,還有其他方法能解決嗎? 先在這邊謝謝各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.213.228.38 ※ 文章網址: http://www.ptt.cc/bbs/MATLAB/M.1405445694.A.A4C.html
jatj:http://goo.gl/QHWeyh exactly what you need 07/16 09:05
jatj:為何不稍微回一下有沒有用呢? 07/18 12:48
kurt28:推樓上 原PO至少也回應一下吧 07/18 22:13
j大您好,您提供的資料非常有用,非常抱歉這麼晚才回覆您, 因為當時還有另一個問題想說能不能用您提供的資料來解決, 這樣就不用上來再問一遍了, 沒有及時回覆您在這裡跟您說聲抱歉, 這邊還有另一個問題想再請教版上的各位, 假設有一個1Xn的矩陣, 矩陣內的元素可重複且相加要等於K, 並得出所有的組合 例如: n=5 K=10 A=[a1 a2 a3 a4 a5] a1+a2+a3+a4+a5=10 一開始我的想法是先跑出所有可能的組合數, 再利用if判斷來挑出符合的矩陣, 因為我的寫法會把 [1 1 1 1 1 ] [2 2 2 2 2 ] ... [10 10 10 10 10 ] 這幾種可能都跑過, 所以當n與K很大時, 處理時間便會非常久, 且有可能會out memory, 所以想請問版上的各位是否有其他的方法能解決, 謝謝 ※ 編輯: mann0614 (49.213.228.38), 07/19/2014 00:56:44
profyang:是只能正整數嗎? 我覺得這不容易 就算有方法可以直接找出 07/19 15:16
profyang:你要的解,他的個數大約也是你全部可能點數的一半吧 07/19 15:17
profyang:也就是你現在全部可能列出來會爆 就算有方法找出你要的解 07/19 15:17
profyang:也有可能會爆 07/19 15:18
kurt28:有回應有推! 07/19 21:27
mann0614:是正整數沒錯!那p大可以講一下您的寫法嗎?說不定能夠對 07/20 10:31
mann0614:我有幫助,目前我的寫法只能用於固定的n,若n改變就必須 07/20 10:31
mann0614:手動改變code,希望目前至少能夠進展到輸入任意數n時也 07/20 10:31
mann0614:能夠跑的程度,謝謝 07/20 10:31
profyang:不好意思 昨天晚上頭腦不太清楚 請忽略我上面的推文XD 07/20 13:30
profyang:你這基本上就是個重複組合的問題H(n,k)=C(n+k-1,k) 07/20 13:33
profyang:重複組合簡單介紹: http://0rz.tw/HRcK7 07/20 13:34
profyang:所以你要做的只是用nchoosek這個function把所有組合列出 07/20 13:36
profyang:來就對了 當然你n和k太大而切n很接近k的話還是很可能爆掉 07/20 13:37
profyang:就是了 07/20 13:37
profyang: 且 07/20 13:37
mann0614:非常謝謝p大您的回覆,提供的資料也對我非常有幫助 07/22 00:02