在向量上以不同顺序跳过对角线的地图上三角矩阵

时间:2016-10-17 13:46:50

标签: algorithm matrix

我想将上三角矩阵变换为不带对角元素的矢量。我注意到这个问题中给出的解决方案。 Map upper triangular matrix on vector skipping the diagonal

但我的问题没什么不同。 我想将5 * 5矩阵转换为矢量,如:

x; a12; a13; a14;  a15<br/>
x; x;   a23; a24; a25<br/>
x; x;  x;   a34;  a35<br/>
x;  x;  x;  x;  a45<br/

a12, a13, a14, a15, a23, a24, a25, a34, a35, a45

This means,<br/>
(i=1,j=2)->k=1; <br/>
(i=1,j=3)->k=2; <br/>
(i=1,j=4)->k=3; <br/>
(i=1,j=5)->k=4; <br/>
(i=2,j=3)->k=5; <br/>
(i=2,j=4)->k=6; <br/>
(i=2,j=5)->k=7; <br/>
(i=3,j=4)->k=8; <br/>
(i=3,j=5)->k=9; <br/>
(i=4,j=5)->k=10; <br/>

我怎样才能得到这种关系f(i,j,N = 5)= k? 我怎样才能得到反函数(i,j)= g(k,N)?

谢谢!

1 个答案:

答案 0 :(得分:0)

通过在嵌套for循环中为每个连续行使用递增起始索引迭代矩阵,同时将元素添加到向量。

for (rowI = 0; rowI < 4; rowI++) {
    for (colI = rowI+1; colI < 5; colI++) {
        vector.add(matrix[rowI][colI]);
    }
}
  • 外循环迭代行。
  • 内环从外环+1的索引处开始,以便跟踪上三角形的内边缘,不包括对角线。
  • 获得正确的索引后,只需将其添加到列表中即可。
  • 外部循环可以停止一行短路以节省周期,因为内部循环开始一个索引更高,因此停止条件将阻止它做任何事情。

或者如果您只需要索引,那么方便的单行是:
f(i,j,N) = (i-1)N + i(i-1)/2 + (j-i)