生成一个向量,比如Ai,i最大为10,其中有几项是固定为0的,比如第2,4,5项,其他项为1、2、3、4、5和0(2个)的排列组合,怎样把这个向量遍历出来
大神多谢你~~我还得问下你,如果数组长度是50,前几个还是12345,其余是0,这个时候超出了perms的范围怎么办呢,还有怎么在原矩阵里插入0向量呢,使用循环吗,有没有简单方法呢
大神辛苦你啦,我把分加到100吧
插入零向量有一个好办法,比如你2,、4、5要插入零向量,排列矩阵为y,假设y为100行7列,则你先生成一个k=zeros(100,10)
然后k(:,[1,3,6:10])=y;
则k就直接插好了。
其实就是把排列y插到k对应的列上去就行了。
大神你这方法太好了,不过之前的排列问题怎么办呢,我现在的这个算法可能要求数组长度得50——100,有没有办法用一个程序把排列逐一地列出来,然后算一下不符合条件就删掉。。。。要不把排列组合全列出来再算估计内存就放不下了
追答如果内存不够,只能牺牲时间换空间了。使用穷举算法,风格类似于c语言,我说一下思路:
从数组的第一个元素开始填写:
先填入当前可以填写的最小数
数组是否到了末尾,即生成了一个排列?
不是,则进入数组的下一个元素,跳回1;是,则检验排列,然后返回上一个元素,进入4;
填一个比当前元素的值大的值,如果没有,继续向前跳一位,仍然进行4;如果有,向后跳一位,跳回1。
当最后跳回至第一个元素的前方时,表明没有可以填的了,结束。
这只是一个大概描述,你可以去找一个c语言穷举算法的例子实际体会一下。不结合程序,估计算法你很难理解。
太谢谢您了,请您看下私信,我私信您了
本回答被提问者和网友采纳