稀疏数组(Sparse Array)

认识:当一个数组中大部分元素为0或同一数据时,可以用稀疏数组来储存其有效信息。

目的:减少存储空间浪费,压缩数据规模,只保存有用信息

存储方式:

存储在二维数组中,在稀疏数组中

6 用稀疏数组表示:arr[0] [0];

7 用稀疏数组表示:arr[0] [1];

8用稀疏数组表示:arr[0] [2];

5 用稀疏数组表示:arr[8] [0];

2 用稀疏数组表示:arr[8] [1];

28 用稀疏数组表示:arr[8] [2];

多维数组表示示意图:

二维数组表示示意图

二维矩阵转换为稀疏数组示意图:

稀疏数组

package array;

public class ArrayDemo06 {
public static void main(String[] args) {
int[][] arr1 = new int[5][5];
arr1[1][2] = 1;
arr1[2][3] = 2;
System.out.println("原始二维数组:");
for (int[] ints : arr1) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
/*
变为稀疏数组
*/

   //获取有用数据的个数
    int sum = 0;
    for (int i = 0; i < arr1.length; i++) {
        for (int j = 0; j < arr1[i].length; j++) {
            if(arr1[i][j] != 0){
                sum++;
            }
        }
    }
    //获取数组总共有几行、几列(arr1.length,arr1[0].length)
    //构建稀疏数组

    int[][] arr2 = new int[sum+1][3];
    arr2[0][0] = arr1.length;
    arr2[0][1] = arr1[0].length;
    arr2[0][2] = sum;

    //获取有用数据的行、列、值,赋值稀疏矩阵
    int num=0;
    for (int i = 0; i < arr1.length; i++) {
        for (int j = 0; j < arr1.length; j++) {
            if(arr1[i][j] != 0){
                num++;
                arr2[num][0] = i;
                arr2[num][1] = j;
                arr2[num][2] =arr1[i][j];
            }
        }
    }

    //稀疏数组的输出
    System.out.println("稀疏数组的输出:");
    for (int[] ints : arr2) {
        for (int anInt : ints) {
            System.out.print(anInt+"\t");
        }
        System.out.println();
    }


    /*
    稀疏数组还原为二维数组
     */
    //二维数组赋值
    int[][] arr3 = new int[arr2[0][0]][arr2[0][1]];
    for (int i = 1; i < arr2.length; i++) {
        arr3[arr2[i][0]][arr2[i][1]] = arr2[i][2];
    }

    //二维数组输出
    System.out.println("还原数组输出:");
    for (int[] ints : arr3) {
        for (int anInt : ints) {
            System.out.print(anInt+"\t");
        }
        System.out.println();
    }
}

}

原始二维数组:
0	0	0	0	0	
0	0	1	0	0	
0	0	0	2	0	
0	0	0	0	0	
0	0	0	0	0	
稀疏数组的输出:
5	5	2	
1	2	1	
2	3	2	
还原数组输出:
0	0	0	0	0	
0	0	1	0	0	
0	0	0	2	0	
0	0	0	0	0	
0	0	0	0	0	

猜你喜欢

转载自www.cnblogs.com/zgmzbhqa/p/12746362.html
今日推荐