欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-25 13:01:46
矩阵的压缩存储什么是压缩存储?在高阶矩阵中,若多个数据元素的值都相同,则为多个值相同的元素只分配一个存储空间,对零元素不分配存储空间。所有二维数组(矩阵)都能压缩吗?未必,要看矩阵是否具备以上压缩条件。什么样的矩阵具备以上压缩条件?一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。什么叫稀疏矩阵?矩阵中非零元素的个数较少(一般小于5%)稀疏矩阵实现方法:将每个非零元素用一个三元组(i,j,aij)来表示,则每个稀疏矩阵可用一个三元组表来表示。public class...

矩阵的压缩存储

  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