Java中的稀疏矩阵是指矩阵中大多数元素都为0,只有极少数非零元素的矩阵。对于这类矩阵,传统的存储方式会浪费大量的空间。因此,有了一种更加高效的存储方式,即三元组。
public class SparseMatrix { private int row; // 矩阵的行数 private int col; // 矩阵的列数 private int[][] data; // 矩阵的数据 public SparseMatrix(int row, int col, int[][] arr) { this.row = row; this.col = col; this.data = new int[row][col]; for (int i = 0; i< arr.length; i++) { int r = arr[i][0]; // 非零元素的行 int c = arr[i][1]; // 非零元素的列 data[r][c] = arr[i][2]; // 非零元素的值 } } public void display() { for (int[] row : data) { for (int v : row) { System.out.print(v + "\t"); } System.out.println(); } } public static void main(String[] args) { int[][] arr = {{0, 2, 3}, {1, 1, 4}, {2, 0, 1}, {2, 2, 2}}; SparseMatrix matrix = new SparseMatrix(3, 3, arr); matrix.display(); } }
在上述代码中,SparseMatrix是稀疏矩阵类,使用二维数组data存储矩阵中的数据。在构造函数中,通过传入的三元组数组arr初始化data数组。display方法用于按照矩阵的格式输出data数组的内容。
下面是待存储的稀疏矩阵:
0 0 3 0 4 0 1 0 0
将其转换成三元组形式为:
0 2 3 1 1 4 2 0 1
使用SparseMatrix类可以将这个稀疏矩阵以三元组的形式存储:
SparseMatrix matrix = new SparseMatrix(3, 3, arr); matrix.display();
输出结果为:
0 0 3 0 4 0 1 0 2
可以看到,SparseMatrix类可以正确地将三元组形式的稀疏矩阵转换为原始矩阵的形式,并且避免了大量的空间浪费。