一维数组中的三角矩阵get()

时间:2017-09-07 11:57:33

标签: java arrays matrix

我想在1 dim数组中保存三角矩阵(以最小化所需空间,省略所有零)并创建函数get()以从原始矩阵中查找特定条目。

例如:

让我们看看下面的三角矩阵:

0 1 2 3 
0 0 4 5 
0 0 0 6 
0 0 0 0

我正在保存这个矩阵:

double[] test = {1,2,3,4,5,6};

所以所有的零都被遗漏了。

我想编写一个函数,它给出了原始矩阵的值:

get(3,4)

应该给我6

我正在检查输入是否超出界限,是否在对角线下面或在对角线上。

//Checking if input is valid 
        if (i <= n &&  j <= n && i >= 1 && j >= 1){
            if( j <= i ){
                return 0.0;
            }else {

            }
        }

这很有效。

我该怎么办?我在找到数组中的等效矩阵条目时遇到了麻烦。

任何帮助都将不胜感激。

编辑:

我的整个代码:

public class dreiecksmatrix {
    int n = 4;
    double[] a = {1,2,3,4,5,6};

    public double get( int i, int j){

        //Checking if input is valid 
        if (i <= n &&  j <= n && i >= 0 && j >= 0){
            if( j <= i ){
                return 0.0;
            }else {

            }
        }

        return 1.0;
    }

    public static void main(String [] args ){
        dreiecksmatrix test = new dreiecksmatrix();
        System.out.println(test.get(2,3));

    }
}

2 个答案:

答案 0 :(得分:3)

以下是计算top-triange值的示例代码。没有角落情况检查如i,j >= 1,但很容易添加它们。

arr = [[0, 1, 2, 3, 4],
       [0, 0, 5, 6, 7],
       [0, 0, 0, 8, 9],
       [0, 0, 0, 0, 10],
       [0, 0, 0, 0, 0]];

flatArr = [1,2,3,4,5,6,7,8,9,10];

n = 5; // matrix size
i = 1; 
j = 3;

if (j <= i) {

    alert(0);

} else {
    pos = 0;
    // find an offset caused by first (i - 1) lines
    for (k = 1; k < i; k++) {
       pos += n - k;
    }

    // find an offset in line x
    pos += j - i;

    // array index start from 0 so decrement value
    pos = pos - 1;

    alert('flatArr[' + pos + '] = ' + flatArr[pos]);
}

答案 1 :(得分:3)

如果您是按列存储矩阵,则有一个简单的公式,用于测试i,j'th矩阵元素的索引。

在你的例子中你会有

double[] test = {1,2,4,3,5,6};

如果Col(i)是列i的开头的索引 那么

  Col(2) = 0
  Col(3) = Col(2) + 1
..
  Col(n) = Col(n-1) + n-1

因此

Col(j)=((j-1)*(j-2))/ 2

i,j矩阵元素从列j的开头进一步存储, 即在Col(j)+ i,所以你应该添加

  return test[ ((j-1)*(j-2))/2 + i];

代码

如果必须按行而不是列存储,则有一个类似的公式。这有点麻烦。我们的想法是首先弄清楚,从最后一个非零行开始,行的末尾将被解决。