给出指数的三角矩阵的行和列

时间:2012-03-12 20:18:36

标签: arrays algorithm

我正在使用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

1 个答案:

答案 0 :(得分:9)

新答案

您可以使用以下公式找到rowcolumn

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