matlab 或 c 的高手来,求一个2n*2n矩阵每行每列都取2个元素的问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 15:18:05
一道小小的建模题最后简化出来的思路,就是在2n*2n矩阵中。n个让每行每列都满足取出2个元素的方法。表达得不是很清楚。比如4*4的矩阵:

就可以表示成 *00* 和 0**0 这两个加起来是 ****
**00 00** ****
0**0 *00* ****
00** **00 ****
而且各自满足每行每列有2个元素 当然,取法有很多很多种,我要编一个程序,在有限的2n*2n矩阵中 把所有可行的情况列出,或给出可行方法的数目。

请高手们给一个思路,能给出可靠的参考程序的话,另给100分
矩阵没给好
*00* | 0**0 | ****
**00 | 00** | ****
0**0 | *00* | ****
00** | **00 | ****

0就表示没有 *就表示有 在4*4的矩阵里,2个这样的矩阵相加可以成为满元素矩阵 同理,2n*2n中有n个相加

首先我可以给出一个生成各行各列都是两个元素的程序,我有思路但是还需要时间调试程序.

先简单的说一下我的思路,每行都是两个元素非常容易,可以任意取两个即可,但是要求每列都是两个就需要有些小技巧了,
但是也不难,而且还非常的多,如果你要遍历所有情况,那还是比较复杂的.我这里给你提供一个思路吧

首先我构造出保证每行有两个元素,但是每列只有一个元素的矩阵,其大小为n*2n,我给这类取一个名叫半矩阵
那么两个这样的矩阵叠加就是我们想要的矩阵

为了表示方便我用位置向量表示,以n=2为例

[12,34]相当于

1 1 0 0
0 0 1 1

[13,24]相当于

1 0 1 0
0 1 0 1

[14,23]相当于

1 0 0 1
0 1 1 0

而这样构成的矩阵不重复的取法有
[12,34]
[13,24]
[14,23]
[34,12]
[24,13]
[23,14]

我从中任取两个叠加即可得到想要的矩阵

[12,34]
[13,24]


1 1 0 0
0 0 1 1
1 0 1 0
0 1 0 1

那么如何构造其他矩阵使得相加为满元素矩阵呢,还是用位置向量的表示方法去看非常的清晰

[12,34]+[34,12]=[1234,1234]
[13,24]+[24,13]=[1234,1234]
相当于如此形式的加法

1100 | 0011 | 1111
0011 | 1100 | 1111

1010 | 0101 | 1111
0101 | 1010 | 1111

因此上下两组合并即可得你需要的矩阵形式
1100 | 0011 | 1111
001