稀疏数组

    技术2023-04-13  124

    稀疏数组(sparsearray)

    有什么用

    在二维数组中如果有很多值是默认值0,因此记录了很多没有意义的数据,需要使用稀疏数组来存储

    处理方法

    1.记录数组一共有几行几列,有多少个不同值

    2.把具有不同值得元素的行列和值记录在小规模的数组中,缩小程序的规模

    例如:

    行(row)列(col)值(value)[0]678[1]126[2]226

    1.[0]表示:原始数组一共有多少行,多少列和一共有多少个值

    2.[1]表示:第1行 ,第2列 ,值是6

    2.[2]表示:第2行 ,第2列 ,值是6

    二维数组转稀疏数组

    遍历原始二维数组,得到有效数据的个数sum根据sum可以创建稀疏数组 sparsearry int [sum] [3]将二维数组的有效数据存入到稀疏数组

    稀疏数组转原始的二维数组

    先读取稀疏数组第一行,创建原始的二维数据数组再读取稀疏数组后几行,并赋值给原始数组

    代码示例

    /** * * 0 0 0 0 0 0 * 0 2 3 0 0 6 * 0 0 0 1 0 0 * 0 0 0 0 0 9 * */ public class Sparse2Array { private int [][] array = {{0,0,0,0,0,0},{0,2,3,0,0,6},{0,0,0,1,0,0},{0,0,0,0,0,9}}; private void getSparse(){ int row = array.length; int col = array[0].length; int valNum = getValNum(); int[][] sparse = new int[valNum+1][3]; int r = 0; for (int i = 0; i <row ; i++) { for (int j = 0; j < col; j++) { if(array[i][j] != 0){ sparse[r+1][0] = i; sparse[r+1][1] = j; sparse[r+1][2] = array[i][j]; r++; } } } sparse[0][0] = row; sparse[0][1] = col; sparse[0][2] = valNum; System.out.println("===========稀疏数组=========="); print(sparse); System.out.println("===========还原数组=========="); int [][] orgarr = new int [sparse[0][0]][sparse[0][1]]; int orrow = sparse.length; for (int i = 1; i < orrow ; i++) { orgarr[sparse[i][0]][sparse[i][1]] = sparse[i][2]; } print(orgarr); } private int getValNum(){ int valNum = 0; int row = array.length; int col = array[0].length; for (int i = 0; i <row ; i++) { for (int j = 0; j < col; j++) { if(array[i][j] != 0){ valNum++; } } } return valNum; } private void print(int [][] arr){ int row = arr.length; int col = arr[0].length; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { System.out.print(arr[i][j]); } System.out.println(); } } public static void main(String[] args) { new Sparse2Array().getSparse(); } }
    Processed: 0.015, SQL: 9