回 帖 发 新 帖 刷新版面

主题:《紧急咨询》:如何用Matlab解决一个排列(Permutation)问题?

大家好,
我的老师现在急需上交一个项目(Matlab写的),其中一个关于排列的部分需要优化一下,然后这个任务交给了我,大约还有3天时间,请各位侠客义女给提供一下思路,在下不胜感激。

问题简述(很容易理解):

有一个5行10列的矩阵,每一列前若干行包含非零元素(见下面的例子)。现在需要在每一列取一个非零元素,然后组成一个1行10列的向量。问题需要找出所有可能的这样的向量。也就是一个排列问题。原始的程序使用的是for循环,总共10层,每一层循环一列。但是虽然这样可以找出全部排列,花费的时间也很可观。现在需要改进一下这个算法,或者找出Matlab里面现有的函数,来优化一下程序执行时间。拜托各位提供以下思路,谢过!


1    2    4    5    3    1    2    1    7    2      

3    3    8    6    5    3    3    2    9    5 

7    5    9    7    0    4    5    4    0    6 

0    6    0    8    0    5    7    5    0    7 

0    0    0    9    0    0    0    8    0    0

回复列表 (共3个回复)

沙发

顶一下

板凳

n=1;
for i=1:10
     n=n*size(unique(a(:,i))); %a为你原来矩阵
end

3 楼

谢谢永恒的回忆。

你给出的例子是找出所有可能的组合数,而我需要把所有组合找出来,放到矩阵里。Any idea?

我来回复

您尚未登录,请登录后再回复。点此登录或注册