作者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/cn.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