一维数组中的java三角矩阵get()
我想将一个三角形矩阵保存在一个一维数组中(为了最小化所需的空间,所有的零都被省略),并创建一个函数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));
}
}
# 1 楼答案
如果改为按列存储矩阵,则有一个简单的公式,用于i,j'矩阵元素的索引测试
在你的例子中,你会
如果Col(i)是第i列开头的索引 然后
因此
Col(j)=((j-1)*(j-2))/2
i,j矩阵元素从列j的开始处进一步存储i, 即Col(j)+i,因此您应该添加
到你的代码
如果必须按行而不是按列存储,则有一个类似的公式。有点乱。其思想是首先从最后一个非零行开始,计算行的端点在哪里
# 2 楼答案
下面是计算顶部三角形值的示例代码。还没有像
i,j >= 1
这样的角案例检查,但是添加它们很容易