其他分享
首页 > 其他分享> > 稀疏矩阵

稀疏矩阵

作者:互联网

假如矩阵只有很少的值是有效的,其余值均为0或均相同,按以下普通矩阵的方法存储无疑浪费了很多空间,我们可以采用稀疏矩阵的方法存储。

稀疏矩阵第一行三个值分别存的是普通矩阵的行数,列数,和有效值个数。

稀疏矩阵除第一行外每行的三个值分别是有效值所在的行、列和有效值。

image-20211231221222704

public class SparseMatrixTest {

    public static void main(String[] args) {
        // 普通矩阵
        int[][] arrays1 = new int[10][10];
        arrays1[1][2] = 1;
        arrays1[3][5] = 2;
        //打印普通矩阵
        printArray(arrays1);

        //原始矩阵 ——> 稀疏矩阵
        //求有效值个数
        int len = 0;
        for (int[] array : arrays1) {
            for (int i : array) {
                if (i != 0) {
                    len++;
                }
            }
        }
        //声明稀疏矩阵。
        int[][] arrays2 = new int[len+1][3];
        /*
        arrays2[0][0]是矩阵的行
        arrays2[0][1]是矩阵的列
        arrays2[0][2]是矩阵有效值个数
         */
        arrays2[0][0] = arrays1.length;
        arrays2[0][1] = arrays1[0].length;
        arrays2[0][2] = len;
        //给稀疏矩阵赋值。
        int count = 0;
        for (int i = 0; i < arrays1.length; i++) {
            for (int j = 0; j < arrays1[i].length; j++) {
                if (arrays1[i][j] != 0) {
                    count++;
                    //有效值所在行
                    arrays2[count][0] = i;
                    //有效值所在列
                    arrays2[count][1] = j;
                    //有效值
                    arrays2[count][2] = arrays1[i][j];
                }
            }
        }
        //打印数组
        printArray(arrays2);

        //稀疏矩阵 --> 原始矩阵
        int[][] arrays3 = new int[arrays2[0][0]][arrays2[0][1]];
        for (int i = 1; i < arrays2.length; i++) {
            arrays3[arrays2[i][0]][arrays2[i][1]] = arrays2[i][2];
        }
        //打印数组
        printArray(arrays3);
    }

    public static void printArray(int[][] arrays){
        for (int[] array : arrays) {
            for (int i : array) {
                System.out.print(i + "\t");
            }
            System.out.println();
        }
    }
}

标签:有效值,int,矩阵,稀疏,arrays1,arrays2
来源: https://www.cnblogs.com/hzyuan/p/15754569.html