稀疏矩阵

假如矩阵只有很少的值是有效的,其余值均为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();
        }
    }
}
posted @   hzyuan  阅读(146)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)

喜欢请打赏

扫描二维码打赏

支付宝打赏

点击右上角即可分享
微信分享提示