我认为这一定很简单,但我说得不对劲......
我有一个MxM三角矩阵,其系数逐行存储在矢量中.例如:
M = [ m00 m01 m02 m03 ]
[ m11 m12 m13 ]
[ m22 m23 ]
[ m33 ]
Run Code Online (Sandbox Code Playgroud)
存储为
coef[ m00 m01 m02 m03 m11 m12 m13 m22 m23 m33 ]
Run Code Online (Sandbox Code Playgroud)
现在我正在寻找一种非递归算法,它给出了矩阵大小M和系数数组索引i
unsigned int row_index(i,M)
Run Code Online (Sandbox Code Playgroud)
和
unsigned int column_index(i,M)
Run Code Online (Sandbox Code Playgroud)
它所指的矩阵元素.所以
row_index(9,4) == 3,column_index(7,4) == 2等等.如果指数计数是从零开始.
编辑:已经给出了几个使用迭代的回复.有谁知道代数表达式?
我有一个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
Run Code Online (Sandbox Code Playgroud)
这是一个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
Run Code Online (Sandbox Code Playgroud)
目前我有以下内容
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* …Run Code Online (Sandbox Code Playgroud)