作者mann0614 (逼哩叭啦)
看板MATLAB
標題[討論]如何產生0與1組成的矩陣的排列組合
時間Wed Jul 16 01:34:52 2014
目前在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://webptt.com/m.aspx?n=bbs/MATLAB/M.1405445694.A.A4C.html
2F:噓 jatj:為何不稍微回一下有沒有用呢? 07/18 12:48
3F:→ 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
4F:推 profyang:是只能正整數嗎? 我覺得這不容易 就算有方法可以直接找出 07/19 15:16
5F:→ profyang:你要的解,他的個數大約也是你全部可能點數的一半吧 07/19 15:17
6F:→ profyang:也就是你現在全部可能列出來會爆 就算有方法找出你要的解 07/19 15:17
7F:→ profyang:也有可能會爆 07/19 15:18
8F:推 kurt28:有回應有推! 07/19 21:27
9F:→ mann0614:是正整數沒錯!那p大可以講一下您的寫法嗎?說不定能夠對 07/20 10:31
10F:→ mann0614:我有幫助,目前我的寫法只能用於固定的n,若n改變就必須 07/20 10:31
11F:→ mann0614:手動改變code,希望目前至少能夠進展到輸入任意數n時也 07/20 10:31
12F:→ mann0614:能夠跑的程度,謝謝 07/20 10:31
13F:推 profyang:不好意思 昨天晚上頭腦不太清楚 請忽略我上面的推文XD 07/20 13:30
14F:→ profyang:你這基本上就是個重複組合的問題H(n,k)=C(n+k-1,k) 07/20 13:33
16F:推 profyang:所以你要做的只是用nchoosek這個function把所有組合列出 07/20 13:36
17F:→ profyang:來就對了 當然你n和k太大而切n很接近k的話還是很可能爆掉 07/20 13:37
18F:→ profyang:就是了 07/20 13:37
19F:→ profyang: 且 07/20 13:37
20F:→ mann0614:非常謝謝p大您的回覆,提供的資料也對我非常有幫助 07/22 00:02