稀疏矩阵对齐

时间:2013-03-09 11:11:09

标签: java matrix alignment sparse-matrix

有没有办法在稀疏矩阵中对齐这些值?

0  0  0  0 8 2 

0  0  0 19 11  0 

0 11  0 13  0  0 

0 18  0  0 7  0 

0  0  0  0 4  0 

0  0 3  0  0  0  

目前我有这个:

if (matrix[i][j] < 20)
System.out.print(matrix[i][j] + " ");
else
System.out.print(" " + 0 + " ");

我遇到的问题是,如果值在1到9之间,那么在值之前没有剩余空间,因此会弄乱我的对齐。我可以插入另一个if语句,但是想知道这是否更简单/更清晰?

任何帮助将不胜感激,谢谢

1 个答案:

答案 0 :(得分:0)

我在处理la4j(线性代数for Java)时解决了类似的任务。 la4j使用overriden toString()方法来满足这种需求。所以,我决定使用慢速(因为控制台输出在调试模式下使用primary,而la4j具有快速有效的发布版本流)但安全算法。这是代码(precision是分隔符后的位数):

@Override
public String toString() {

    final int precision = 3; 

    int formats[] = new int[columns];

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < columns; j++) {
            long value = (long) unsafe_get(i, j);
            int size = Long.toString(value).length() + precision + 2;
            formats[j] = size > formats[j] ? size : formats[j];
        }
    }

    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < columns; j++) {
            sb.append(String.format("%" + Integer.toString(formats[j])
                    + "." + precision + "f", unsafe_get(i, j)));
        }
        sb.append("\n");
    }

    return sb.toString();
}

因此,算法有两个步骤:

  1. formats数组计算为需要的字符数 打印i colomn aligned
  2. 打印矩阵