Latin方及Hadamard矩阵
来源:互联网 发布:屹然不动而远乎 编辑:程序博客网 时间:2024/05/16 02:50
Latin方:N个元素在N*N的矩阵中每一行每一列仅仅出现一次。
普通Latin方的构造:
int g[105][105];void paint(int n){ for(int i=1;i<=n;i++){ g[1][i]=i; } for(int i=2;i<=n;i++){ for(int j=n;j>1;j--){ g[i][j]=g[i-1][j-1]; } g[i][1]=g[i-1][n]; }}
正交拉丁方:
设,是两个N阶拉丁方。同一位置上的数字配对后,有序数对全部互异。那么AB正交。
1,2,6阶的拉丁方是没有正交的。
4阶正交阵:
(4.1)(3.3)(2.4)(1.2)
(2.2)(1.4)(4.3)(3.1)
(1.3)(2.1)(3.2)(4.4)
(3.4)(4.2)(1.1)(2.3)
如果,n>=3,n=pa,p是一个素数,a是一个正整数,那么有n-1个正交的拉丁方。
构造:
第i个矩阵:
void paint(int n){ for(int i=1;i<=n-1;i++){ cout<<"matrix: "<<i<<endl; for(int j=1;j<=n;j++) cout<<j<<" "; cout<<endl; int last=n; for(int ii=2;ii<=n;ii++){ int first=last+i+1; while(first>n) first-=n; // 避免n变成0 for(int j=first;j<=n;j++) cout<<j<<" "; for(int j=1;j<first;j++) cout<<j<<" "; cout<<endl; last=first-1; } }}
Hadamard矩阵:设矩阵H满足 ,且所有的元素是1或者-1,那么H即是hadamard矩阵。
它的性质(我暂时听说有这三条):
Hn为正交方阵,所谓正交矩阵指它的任意两行(或两列)都是正交的;
任意一行(列)的所有元素的平方和等于方阵的阶数;
Hadamard矩阵的阶数都是2或者是4的倍数。
递归方法构造(2阶H原始矩阵在1区):
3区 | 4区
------------
1区 | 2区
(我表示这种构造方法我看的似懂非懂~)
#include <iostream>#include <cstdio>using namespace std;int H[2][2]={1,1,1,-1};int dfs(int x,int y){ if(x<2 && y<2) return H[x][y]; int i=0,j=0; if(x>=2){ i=1; while(i*2<=x) i=i<<1; x-=i; } if(y>=2){ j=1; while(j*2<=y) j=j<<1; y-=j; } if(i==j) return -dfs(x,y); // 4 else if(i>j) return dfs(x,y+j); // 3 else return dfs(x+i,y); // 2}int g[105][105],g2[105][105],g3[105][105];int main() // g为hadamard矩阵 g2为其转置 g3为相乘后的结果{ int n; while(cin>>n){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ g[i][j]=dfs(i,j); } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ g2[j][i]=g[i][j]; } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ g3[i][j]=0; for(int k=0;k<n;k++){ g3[i][j]+=g[i][k]*g2[k][j]; } cout<<g3[i][j]<<" "; } cout<<endl; } } return 0;}
0 0
- Latin方及Hadamard矩阵
- 哈达玛(Hadamard)矩阵
- HADAMARD变换
- Hadamard 变换
- Hadamard Matrix
- Hadamard变换
- Hadamard product
- 矩阵的四次方
- 最大子方矩阵
- 矩阵无限方
- 幻方矩阵
- Pig_3. Pig Latin 命令及应用 -- 待完善
- Pig_4. Pig Latin 脚本开发及调试 -- 待完善
- 辨析matmul product(一般矩阵乘积),hadamard product(哈达玛积)、kronecker product(克罗内克积)
- Hadamard and Kronecker product
- walsh-Hadamard变换
- Fast Walsh-Hadamard Transform
- walsh-Hadamard变换
- 实用的adb 命令连接 android 电视
- php命名空间
- [C#] 值类型的装箱和拆箱
- C语言实现牛顿迭代法解方程
- #Android源码#View的onMeasure方法
- Latin方及Hadamard矩阵
- Ubuntu 14.04 安装samba服务器
- Exception for IOS 1-linker command failed with exit code 1 (use -v to see invocation)
- nyoj71独木舟上的旅行
- NOIp2010
- HDU 2732 Leapin' Lizards(最大流)
- JavaWeb_Servlet讲解(二)
- Android LayoutInflater详解
- 蓝桥杯 算法训练 ALGO-2 最大最小公倍数