找回密码
 注册
Simdroid-非首页
查看: 302|回复: 6

这样一个矩阵想了好久都没想出来怎么事项?

[复制链接]
发表于 2004-11-29 21:48:31 | 显示全部楼层 |阅读模式 来自 湖南长沙
0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 0

我试了几种循环总是实现不了,主要是0的实现,哪位仁兄帮一下忙了!?
可以推广的!
 楼主| 发表于 2004-11-29 21:50:39 | 显示全部楼层 来自 湖南长沙

Re:这样一个矩阵想了好久都没想出来怎么事项?

Simdroid开发平台
0 0 1 1 1
0 1 0 1 1
0 1 1 0 1
0 1 1 1 0
1 0 0 1 1
1 0 1 0 1
1 0 1 1 0
1 1 0 0 1
1 1 0 1 0
1 1 1 0 0

一个扩展!
 楼主| 发表于 2004-11-29 22:45:28 | 显示全部楼层 来自 湖南长沙

Re:这样一个矩阵想了好久都没想出来怎么事项?

已知一个(n*(n-1)/2)行 n列的矩阵,
然后按照上面的把是0的地方改为0
发表于 2004-11-30 00:10:28 | 显示全部楼层 来自 北京朝阳

Re:这样一个矩阵想了好久都没想出来怎么事项?

注意观察你的矩阵的形式:
n=4的时候,可以将你的矩阵分成3个:

matrix1=

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

matrix2=

1 0 0 1
1 0 1 0

matrix3=

1 1 0 0

同样,在n为5的时候,可以将你的矩阵分为下面4个矩阵,注意观察

matrix1=

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

matrix2=

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

matrix3=

1 1 0 0 1
1 1 0 1 0

matrix4=

1 1 1 0 0

得到这些矩阵的程序就可以是下面的程序了,我用for循环来实现的,不知道有没有高人还可以用一些效率更高的来实现,不过这个当中不存在什么计算,无所谓了:

function y=gencode(n)
%   Author: WaitingForMe
%   Email:heroaq_2002@163.com
y=[];
temp=[];
for i=n-1:-1:1
    temp=ones(i,n);
    temp(:,n-i)=0;
    temp(:,n-i+1:n)=temp(:,n-i+1:n)-diag(ones(1,i));
    y=[y;temp];
end

下面是一个n等于6的时候上面的函数得到的矩阵:

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

 楼主| 发表于 2004-11-30 16:14:14 | 显示全部楼层 来自 湖南长沙

Re:这样一个矩阵想了好久都没想出来怎么事项?

果然是高手,程序已经实现,多谢你的帮忙,以后遇到问题,还请你多多帮忙!

你说的这个规律我晓得,我一直是顺着考虑的,而没有从后往前来作,把组合这个方面给忽略了!
发表于 2006-10-15 12:13:28 | 显示全部楼层 来自 新疆乌鲁木齐
偶尔看到这个帖子...
这两天碰巧也帮别人做了一个,相信我的方法也比较简单——在M个由0和1组成的数列中,有N(N<M)个1,相当于把这N个1在M个数中取不同组合,用nchoosek排个座位即可,下面是一个在8个数中有4个0的做法:
  1. function fff
  2. clc
  3. B=nchoosek(1:8,4);
  4. A=zeros(size(nchoosek(1:8,4),1),8);
  5. for i=1:length(A)
  6.     A(i,B(i,:))=1;
  7. end
  8. A
复制代码
发表于 2006-10-15 13:25:18 | 显示全部楼层 来自 武汉大学
这不是二进制表达吗?
连续 加1  !
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-13 11:12 , Processed in 0.046325 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表