稀疏矩阵

基本介绍

当一个数组里面有大量重复的的元素时,比如0,可以用稀疏矩阵来保存该数组

图解

转换思路

  1. 记录数组总共有几行,几列,以及几个不同值
  2. 把不同值的行,列,以及值,存入一个规模较小的数组,从而缩小规模

代码,Java实现

定义上图中的二维数组

//定义上图中的二维数组
int[][] arry1 = new int[6][7];
arry1[0][3] = 22;
arry1[0][6] = 15;
arry1[1][1] = 11;
arry1[1][6] = 17;
arry1[2][3] = -6;
arry1[3][6] = 39;
arry1[4][0] = 91;
arry1[5][2] = 28;

数组转换成稀疏数组

  public static int[][] array2sparese(int[][] arry){
    int count = 0;
    //先遍历一遍数组,确定稀疏数组的长度
    for(int[] row : arry){
        for(int data : row){
            if(data != 0){
                count++;
            }
        }
    }
    //初始化稀疏数组
    int[][] sparese = new int[count+1][3];
    //存入原始数组row,col,有效个数
    sparese[0][0] = arry.length;
    sparese[0][1] = arry[0].length;
    sparese[0][2] = count;
    //遍历原始数组,存入有效数字
    int sum = 0;
    for(int i = 0; i < arry.length; i ++){
        for(int j = 0; j < arry[i].length; j++){
            if(arry[i][j] != 0){
                sum++;
                sparese[sum][0] = i;
                sparese[sum][1] = j;
                sparese[sum][2] = arry[i][j];
            }
        }
    }
    return sparese;
}

稀疏数组转换成数组

//稀疏数组转换成普通数组
public static int[][] sparese2array(int[][] sparese){
    //读取信息,创建数组
    int[][] arry = new int[sparese[0][0]][sparese[0][1]];
    //遍历稀疏数组,然后赋值
    for(int i = 1; i < sparese.length; i++){
        arry[sparese[i][0]][sparese[i][1]] = sparese[i][2];
    }
    return arry;
}

测试,运行

//输出原始数组看看
System.out.println("=======原始数组=======");
for(int[] row : arry1){
    for(int data : row){
        System.out.print(data + " ");
    }
    System.out.println();
}
//转换成稀疏数组
int[][] sparese = array2sparese(arry1);
//输出看看
System.out.println("=======稀疏数组=======");
for(int[] row : sparese){
    for(int data : row){
        System.out.print(data + " ");
    }
    System.out.println();
}
//转回来
int[][] arry2 = sparese2array(sparese);
//输出看看
System.out.println("=======稀疏数组变回原始数组=======");
for(int[] row : arry2){
    for(int data : row){
        System.out.print(data + " ");
    }
    System.out.println();
}

输出结果


posted @ 2020-03-29 16:05  小码过河233  阅读(181)  评论(0编辑  收藏  举报