在2D上三角,下三角线性结构的映射元素 [英] Mapping elements in 2D upper triangle and lower triangle to linear structure
问题描述
我有一个矩阵M是N×N个尺寸,对其中M(I,J)= M(J,I)
我想重新present这种结构为(N²+ N)/ 2线阵K,以节省空间。我的问题是想出的公式,将映射M(分(I,J),分钟(I,J))转换成范围[0,(N ^ 2)/ 2)
下面是与索引中K线性阵列的3×3矩阵的映射,所述X表示的那些细胞中不存在,取而代之的转置是用于:
0123
X456
XX78
XXX9
下面是索引用于K线阵
7×7矩阵 0 1 1 2 3 4 5 6
0 00 01 02 03 04 05 06
1 07 08 09 10 11 12
2 13 14 15 16 17
3 18 19 20 21
4 22 23 24
5月25日26
6月27日
目前我有以下
INT主要()
{
const的无符号整数N = 10;
INT M [N] [N];
为int * M_ =安培(M [0] [0]);
断言(M [I] [j]的= M_〔N *分(I,J)+最大(I,J)]);
//为int * K = .....
//断言(M [I] [J] = K [...]);
返回0;
}
要往相反的方向而这正是我需要的:
无效printxy(INT指数)
{
INT Y =(int)的(( - 1 + SQRT(8 *指数+ 1))/ 2);
INT X =指数 - Y *(Y + 1)/ 2;
}
I have a matrix M which is of NxN dimensions, where M(i,j) = M(j,i)
I would like to represent this structure as a (N²+N)/2 linear array K, to save space. My problem is coming up with the formula that will map a M(min(i,j),min(i,j)) into a range [0,(N^2)/2)
Below is a mapping of a 3x3 matrix with indexes for K linear array, the X means those cells don't exist and instead their transpose is to be used:
0123
X456
XX78
XXX9
Here is a 7x7 matrix with indexes for the K linear array
0 1 2 3 4 5 6
0 00 01 02 03 04 05 06
1 07 08 09 10 11 12
2 13 14 15 16 17
3 18 19 20 21
4 22 23 24
5 25 26
6 27
at the moment I have the following
int main()
{
const unsigned int N = 10;
int M[N][N];
int* M_ = &(M[0][0]);
assert(M[i][j] = M_[N * min(i,j) + max(i,j)]);
//int* K = .....
//assert(M[i][j] = K[.....]);
return 0;
}
To go the opposite direction which is what I needed:
void printxy(int index)
{
int y = (int)((-1+sqrt(8*index+1))/2);
int x = index - y*(y+1)/2;
}
这篇关于在2D上三角,下三角线性结构的映射元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!