从头开始的Java学习Day07——稀疏矩阵

2022-07-27,,,,

矩阵的压缩存储

  1. 什么是压缩存储?
    在高阶矩阵中,若多个数据元素的值都相同,则为多个值相同的元素只分配一个存储空间,对零元素不分配存储空间。
  2. 所有二维数组(矩阵)都能压缩吗?
    未必,要看矩阵是否具备以上压缩条件。
  3. 什么样的矩阵具备以上压缩条件?
    一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。
  4. 什么叫稀疏矩阵?
    矩阵中非零元素的个数较少(一般小于5%)

稀疏矩阵实现方法:

将每个非零元素用一个三元组(i,j,aij)来表示,则每个稀疏矩阵可用一个三元组表来表示。

public class SparseMatrix {
    public static void main(String[] args) {
    /*
    创建一个15*15的二维数组
    */
        int[][] a = new int[15][15];
        a[0][1] = 1;
        a[1][1] = 2;
        a[1][4] = 2;
        /*
         * 记录有效数字个数
         * */
        int sum = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j] != 0) {
                    sum++;
                }
            }
        }

        /*创建稀疏数组*/
        int[][] Matrix = new int[sum + 1][3];
        Matrix[0][0] = 15;
        Matrix[0][1] = 15;
        Matrix[0][2] = sum;

		/*
		在稀疏矩阵中进行存储
		*/
        int index=1;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j] != 0) {
                    Matrix [index][0]=i;
                    Matrix [index][1]=j;
                    Matrix [index][2]=a[i][j];
                    index++;
                }
            }
        }
        /*遍历稀疏矩阵并输出*/
        System.out.println("输出稀疏矩阵");
        for (int i = 0; i < Matrix.length; i++) {
            for (int j = 0; j < Matrix[i].length; j++) {
                System.out.print(Matrix[i][j]+"\t");
            }
            System.out.println();
        }

        /*将稀疏数组转二维数组*/
        int [] [] b = new int[Matrix[0][0]][Matrix[0][1]];
        for (int i = 1; i < Matrix.length; i++) {
            b[Matrix[i][0]][Matrix[i][1]]=Matrix[i][2];
        }
        /*
        遍历输出转化后的二维数组
         */
         System.out.println("输出转化后的二维矩阵");
        for (int i = 0; i < b.length; i++) {
            for (int j = 0; j < b[i].length; j++) {
                System.out.print(b[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

输出结果:

输出稀疏矩阵
15	15	3	
0	1	1	
1	1	2	
1	4	2	
输出转化后的二维矩阵
0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	
0	2	0	0	2	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	

Process finished with exit code 0


本文地址:https://blog.csdn.net/XiaoFanMi/article/details/109865461

《从头开始的Java学习Day07——稀疏矩阵.doc》

下载本文的Word格式文档,以方便收藏与打印。