用java编写三角矩阵_在Java中表示上三角矩阵的最佳数据结构是什么?

本文介绍如何在Java中使用优化的数据结构表示上三角矩阵,采用节省内存的packed storage matrix方式,通过公式计算索引,实现set和get方法,并提供了验证参数和计算索引的辅助函数。
摘要由CSDN通过智能技术生成

如果你想节省内存,你的解决方案看起来很棒 - 它被称为packed storage matrix。逐列,自上而下,您的数组将如下所示:1 2 6 3 7 8 4 1 9 5

我建议根据总和公式(n² + n) / 2(行和列为零)建议更简单的指数计算。

list_index = (column^2 + column) / 2 + row;

实现可能如下所示:

public class TriangularMatrix {

private final int[] list;

public TriangularMatrix(int size) {

list = new int[sumFormula(size)];

}

public int set(int row, int column, int value) {

validateArguments(row, column);

int listIndex = getListIndex(row, column);

int oldValue = list[listIndex];

list[listIndex] = value;

return oldValue;

}

public int get(int row, int column) {

validateArguments(row, column);

return list[getListIndex(row, column)];

}

private void validateArguments(int row, int column) {

if (row > column) {

throw new IllegalArgumentException("Row (" + row + " given) has to be smaller or equal than column (" + column + " given)!");

}

}

private int getListIndex(int row, int column) {

return sumFormula(column) + row;

}

private int sumFormula(int i) {

return (i*i + i) / 2;

}

}

有another question on SO讨论(负面)性能影响,尽管它与Fortran有关。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值