稀疏数组

一,稀疏数组

1.定义

稀疏数组可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组

2.存储

刚说到稀疏数组是一种压缩后的数组,为什么要进行压缩存储呢?

[if !supportLists]·       [endif]原数组中存在大量的无效数据,占据了大量的存储空间,真正有用的数据却少之又少

[if !supportLists]·       [endif]压缩存储可以节省存储空间以避免资源的不必要的浪费,在数据序列化到磁盘时,压缩存储可以提高IO效率

3:二维数组转稀疏数组

思路:1:遍历二维数组了解数组中有效值个数sum

      2:创建稀疏数组Arr[sum][3]

         3:将数据存入稀疏数组第一列【row】【rol】[value]

/**

 *初始化二维数组

 *

 *    0 0 0 0 0 0 0 0 0 0 0

 *    0 0 1 0 0 0 0 0 0 0 0

 *    0 0 0 0 2 0 0 0 0 0 0

 *    0 0 0 0 0 0 0 0 0 0 0

 *    0 0 0 0 0 0 0 0 0 0 0

 *    0 0 0 0 0 0 0 0 0 0 0

 *    0 0 0 0 0 0 0 0 0 0 0

 *    0 0 0 0 0 0 0 0 0 0 0

 *    0 0 0 0 0 0 0 0 0 0 0

 *    0 0 0 0 0 0 0 0 0 0 0

 *    0 0 0 0 0 0 0 0 0 0 0

 *

 */

//初始化原数组int[][] array = new int[11][11];

array[1][2] = 1;

array[2][4] = 2;

for

(int[] row : array){


for(int item : row){

        System.

out.printf("%d\t",item);


}

    System.

out.printf("\n");

}

System.

out.println("---------> 二维数组转稀疏数组");

/**

 *稀疏数组

 *

 *    11 11 2

 *    1  2  1

 *    2  4  2

 *

 */

//得到非0数据数int sum = 0;

for

(int i = 0;i<11;i++){


for(int j = 0;j<11;j++){


if(array[i][j] != 0){

            sum++

;


}

    }

}

//创建稀疏数组int[][] sparseArray = new int[sum+1][3];

//给稀疏数组赋值sparseArray[0][0] = 11;

sparseArray[0][1] = 11;

sparseArray[0][2] = sum;

//将非0的数放入稀疏数组

//count

:标识第几个非0数int count = 0;

for

(int i = 0;i<11;i++){


for(int j = 0;j<11;j++){


if(array[i][j] != 0){

            count++

;


sparseArray[count][0] = i;


sparseArray[count][1] = j;


sparseArray[count][2] = array[i][j];


}

    }

}

//遍历稀疏数组System.out.printf("列数 "+"行数 "+"值");

System.out.printf("\n");

for

(int i = 0;i<sparseArray.length;i++){

    System.

out.printf("%d ,%d , %d\t",sparseArray[i][0],sparseArray[i][1],sparseArray[i][2]);


System.out.printf("\n");

}

System.

out.println("----------->稀疏数组转回原始数组");


4:稀疏数组转二维数组

1:因为稀疏数组第一列数据为行总数,列总数,有效数值

2:创建二维数组Arrilist[row][rol]

3:遍历稀疏数组赋值二维数组

int[][] oldArray = new int[sparseArray[0][0]][sparseArray[0][1]];

//将原来非0的数填充回去for(int i = 1;i<=count;i++){

    oldArray[sparseArray[i][

0]][sparseArray[i][1]] = sparseArray[i][2];

}

//遍历刚转回的原始数组for(int[] row : oldArray){


for(int item : row){

        System.

out.printf("%d\t",item);


}

    System.

out.printf("\n");

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1稀疏数组 没什么好说的,挺简单的。就是讲数组转换为n行3列的二维数组。 接下来是代码 package com.a...
    文茶君阅读 1,792评论 0 0
  • --- categories: - 数据结构与算法 tags: - 算法引入,稀疏数组 title: 数据结构...
    夜雨_7f03阅读 1,445评论 0 0
  • 文章目录 稀疏数组 稀疏数组一般使用在一个二维数组存储着大量无效数据的场景中。举个例子:一个二维数组存储了100个...
    性感皮卡阅读 3,795评论 0 0
  • 稀疏数组 稀疏数组的作用就是将数组压缩成更小的数组,一般这个数组里面包含比较多的同一个元素。 实现思想:稀疏数组的...
    半树佛花香易散阅读 1,562评论 0 0
  • 当一个数组的元素包含大量的0时,或者为同一个值的数组时,可以使用稀疏数组来保存数组. 稀疏数组的处理方法: 1,记...
    daysting阅读 2,548评论 0 0

友情链接更多精彩内容