24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1788  |  回复: 8

maotian7658

木虫 (正式写手)

[求助] 矩阵生成[1, 0, -1]:满足总和为定值,累加和在限定范围

例如,生成3行20列的矩阵,每个元素取值为-1,0或1,1和-1的个数限定,3行的和分别为4,6,5,矩阵元素累加和不能大于5,也不能小于-3。同时1和-1按一定顺序填充,如1按照[13 12  3  18 20  9  16 5 4 14 17 6 11 10 7 19  8 1  2 15] 从头到尾放置,-1按照相反的顺序,一旦出现冲突,当前位置被放弃,考虑下一位置。
如:第一行,1和-1 的个数分别设定为9 和5,序列 [0 1 1 1 1 1 1 1 1 1 0 0 0 0 -1 -1 -1 -1 -1], 总和虽然等于4,但累加和(cumsum)为[0  1 2 3 4  5  6  7  8  9  9 9  9  9 8  7  6 5 4],不满足条件。
请问各位老师,如何能实现上述目的,能否给出具体代码。拜谢!

[ Last edited by maotian7658 on 2014-2-24 at 16:44 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maotian7658

木虫 (正式写手)

坐等大神解答!!!
2楼2014-02-24 16:45:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ju5200

木虫 (正式写手)

【答案】应助回帖

可否解释一下这句话:
如1按照[13 12  3  18 20  9  16 5 4 14 17 6 11 10 7 19  8 1  2 15] 从头到尾放置,-1按照相反的顺序,一旦出现冲突,当前位置被放弃,考虑下一位置
3楼2014-02-24 17:01:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maotian7658

木虫 (正式写手)

引用回帖:
3楼: Originally posted by ju5200 at 2014-02-24 17:01:05
可否解释一下这句话:
如1按照 从头到尾放置,-1按照相反的顺序,一旦出现冲突,当前位置被放弃,考虑下一位置

谢谢围观,这句话的意思是存放1和-1的时候按照一定的优先级,也就是按照给出的这个序列。例子中矩阵每列含20个元素,共有20个位置,1是按照该序列从头到尾的次序存放,摆满9个位置为止,-1是从尾到头开始,也就是15,2,1,8...的顺序...遇到冲突(累加和不在范围内),放弃该位置,继续寻找下一个,只到摆满相应个数。
4楼2014-02-24 17:22:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ju5200

木虫 (正式写手)

引用回帖:
4楼: Originally posted by maotian7658 at 2014-02-24 17:22:24
谢谢围观,这句话的意思是存放1和-1的时候按照一定的优先级,也就是按照给出的这个序列。例子中矩阵每列含20个元素,共有20个位置,1是按照该序列从头到尾的次序存放,摆满9个位置为止,-1是从尾到头开始,也就是1 ...

有个问题:根据题意 以第一行为例,一旦1的个数确定了 第一行的-1和0的个数也都确定了,那么现在任务时到底有多少个1 第二、三行任务也是确定1的个数
不妨设为三个未知数xyz,根据矩阵和的要求可以列出两个不等式,从而xyz实际上只有一个自由度 因而可以考虑穷举法
下面确定每一行1的位置就有问题了  因为你所给的顺序序列并不是必须遵守的顺序而是可以放弃的,那么1和-1谁的优先级高呢?还有,同样是1,前面的15和2的位置谁的优先级高呢?这些问题你都要先讲明白
5楼2014-02-24 21:17:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maotian7658

木虫 (正式写手)

引用回帖:
5楼: Originally posted by ju5200 at 2014-02-24 21:17:57
有个问题:根据题意 以第一行为例,一旦1的个数确定了 第一行的-1和0的个数也都确定了,那么现在任务时到底有多少个1 第二、三行任务也是确定1的个数
不妨设为三个未知数xyz,根据矩阵和的要求可以列出两个不等式 ...

1的个数是另外确定的,问题主要研究怎么去存放1和-1. 假设3行1的个数分别为9,10,8,-1的个数可以求出为:5,4,3. 优先级的问题:对于1,优先级别是从头到尾依次降低(13比12的高);对于-1,优先级别是从尾到头,优先级别依次降低(即:15比2的高)。
6楼2014-02-25 10:14:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ju5200

木虫 (正式写手)

引用回帖:
6楼: Originally posted by maotian7658 at 2014-02-25 10:14:09
1的个数是另外确定的,问题主要研究怎么去存放1和-1. 假设3行1的个数分别为9,10,8,-1的个数可以求出为:5,4,3. 优先级的问题:对于1,优先级别是从头到尾依次降低(13比12的高);对于-1,优先级别是从尾到头,优先 ...

大概的解决方法应该是这样:无非一个判定条件 一个赋值语句A(n,m)=1 矩阵A是要求的矩阵 nm是对应位置的索引
只是具体实现起来可能要费一些时间
7楼2014-02-25 11:03:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maotian7658

木虫 (正式写手)

引用回帖:
7楼: Originally posted by ju5200 at 2014-02-25 11:03:31
大概的解决方法应该是这样:无非一个判定条件 一个赋值语句A(n,m)=1 矩阵A是要求的矩阵 nm是对应位置的索引
只是具体实现起来可能要费一些时间...

是的,就是要对对应的位置进行赋值,因为这个程序要嵌套进另一个程序,所有对它的效率要求比较高。可能有一些我不知道的函数或技巧,不知老兄有没有好的方法或建议?谢谢!
8楼2014-02-25 11:13:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maotian7658

木虫 (正式写手)

求高手指点!!
9楼2014-02-26 16:04:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 maotian7658 的主题更新
信息提示
请填处理意见