【发布时间】:2011-06-15 17:57:06
【问题描述】:
我有一个矩阵 M,它有 NxN 维,其中 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;
}
【问题讨论】:
-
三角矩阵的元素个数不是N²/2,而是(N²+N)/2。
标签: c++ arrays algorithm matrix indexing