我正在使用MxM三角矩阵,其格式如下:
M = [m00 m10 m20 m30 m40]
[m11 m21 m31 m41 ]
[m22 m32 m42 ]
[m33 m43 ]
[m44 ]
如果根据索引更容易想象这一点,它将如下所示:
M = [0 1 3 6 10]
[2 4 7 11 ]
[5 8 12 ]
[9 13 ]
[14 ]
我知道这种索引方式可能看起来很奇怪,但是如果我能保持索引系统的原样,那么这个模块可以很好地与其他人一起工作。
我正在努力学习一种算法,该算法采用矩阵的索引和大小,该矩阵可以返回给定索引所属的行和列。理想情况下,我会有两个功能,如:
int getRow (int index, int size);
int getCol (int index, int size);
因此getRow (7, 5)
会返回3
getCol (7, 5)
会返回1
我已经遇到过这个帖子,但我似乎无法修改那里的解决方案,因为我正在编制索引的方式。
algorithm for index numbers of triangular matrix coefficients
答案 0 :(得分:9)
新答案
您可以使用以下公式找到row
和column
:
int row = floor(-0.5 + sqrt(0.25 + 2 * index));
int triangularNumber = row * (row + 1) / 2;
int column = index - triangularNumber;
这是有效的,因为每行中的第一项是triangular number(0,1,3,6,10,15 ......)。因此,低于index
的最大三角数给我们row
。然后,column
只是index
与该三角数之间的差异。
另请注意,您不需要参数M
。
旧答案
此代码将为您提供row
的{{1}}和column
。
index