数学建模社区-数学中国

标题: matlab排列组合问题 [打印本页]

作者: tansuozhe    时间: 2009-12-26 14:18
标题: matlab排列组合问题
各位老师:6 t0 I; n  S- |
     我是初学matlab。现在遇到一个难题,用matlab的函数combntns()
  _# d1 h! m0 @. ~1 Y* I! i8 D求1-210共210个自然数的组合,我算从210个自然数中取3个进行组合(不重复),7 X$ o3 I' I- Z# a0 I. f
在matlab命令窗口输入如下函数:! @7 L' t- k0 a- Q% p/ w7 J
》combntns(1:210,3)
' ?3 g3 A# \% C) q( g/ [- r运行计算都正常的列出了所有组合数,可是想算从210个自然数中取20个进行组合(不重复)
; q$ d% M( m: {+ Y8 R我知道这样的组合数非常大为:4.49333E+27,我在在matlab命令窗口输入如下函数:9 G) R; y  }: i; S. Z: ~
》combntns(1:210,20); U3 }! {" y  Q9 K: D
提示出错信息如下:
* [# L- ]! A9 t+ K1 gError in ==> combntns at 71' t6 n* }/ O' v; a0 R
  out=[out; choicevec(i)*ones(size(tempout,1),1) tempout]
3 D+ `" J. P8 F9 W- ~+ I意思是内存不够吧,现在想请教一下几个问题:5 u: p8 V6 N/ j( }! A& v
1  提示的内存不够是指内存条不够大,还是硬盘空间不够,这样的大的求组合数,matlab是
1 p; r* D/ S# V* D5 v   否有函数能胜任,如果有,请问是什么函数?# b0 Q' F# E2 [0 p
2,如果matlab的函数不能胜任,请问我如何用M文件编程计算从210个自然数中取20个的组合数并列出,
$ S. v; ?( r/ f8 Y2 |: s1 d   (我想可能一次性算出不大可能),如果分段计算,应该如何编程,烦请各位老师提供一下代码,5 w% I/ P5 |' f, j; w* r( \8 Y6 F" k( m
    期盼各位老师指教......
作者: 厚积薄发    时间: 2009-12-26 18:33
对于你的问题一:是内存不够大,非外存不够大;不管是任何函数都不行,因为一次算出所有组合数的可能性为0
0 _1 P8 h2 U2 `& _4 J- O                        所以任何函数都不可能在一次执行这么多,这是硬件资源所**的,而非软件所能左右8 b& J1 S0 R  G
对于你的问题二:你可以先将210分成7段,即:0-25,26-50,.....,201-210;3 v8 L% R) }* |7 l
                然后按下列几步进行:3 p8 M+ C; G' u. d2 s
(1)在第一段内搜索排列,然后在第二段内搜索排列,然后在第三段内搜索排列。。。。。。。。。这样依次搜索各段的排列,搜索完后,保存数据,进入下一步;0 v# W- R' O8 i0 j
(2)然后两段组合搜索排列,注意这次是在两段内搜索,所以得到的排列需要包含两端内的数据
: N6 z4 G! M/ r+ V7 I4 D(3)然后三段组合/ ?) V/ q1 a0 C" G' U
依次下去
- S# J0 v/ g0 n2 R; H, b7 k3 A5 ?2 g(。。。)最后到10段组合;( i5 B, Q& k2 w6 O' W
这样才能处理过来。虽然比较麻烦,但是只能这样啦,除非在大型机上就不存在这种问题啦;
作者: 厚积薄发    时间: 2009-12-26 18:35
我之所以选择每段的长度是25,是因为我的机子在长度为25时,反应快,而且效果比较好
作者: 厚积薄发    时间: 2009-12-26 18:38
这么大量的计算和数据,用小型机计算有点太面前啦,应该用大型机计算比较合适% K! S& Z1 ~3 e2 e; b8 Z

3 n: P) t  q. t) l3 [我试了个每段长为27,我的机子都要计算将近两分钟(我的内存2G),更不用说你把所有的都计算完,估计至少得一天吧,而且还没有休息
作者: shuaimao1988    时间: 2009-12-27 15:22
很好 顶!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 兄弟    时间: 2010-1-29 12:48
顶!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: hupanfeng    时间: 2010-2-18 15:30
顶!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: chendongyi    时间: 2010-7-31 23:46
受教!!!!!!
作者: chendongyi    时间: 2010-7-31 23:48
受教!!!!!!




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5