我有一个维度为NxN的矩阵M,其中M(i,j)=M(j,i)。
我想将这个结构表示为(N²+N)/2个线性数组K,以节省空间。我的问题在于如何找到一个公式,将M(min(i,j),min(i,j))映射到[0,(N^2)/2)范围内。
下面是一个3x3矩阵的映射,其中K线性数组的索引用作参考,X表示这些单元格不存在,相反它们的转置要被使用:
0123
X456
XX78
XXX9
这是一个7x7的矩阵,其中包含线性数组K的索引。
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
目前我有以下代码:
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;
}