稀疏数组
- 引入:在棋盘游戏中经常会遇到,保留此局或者复盘,此时我们一般会使用一个二维数组将棋盘的信息存储起来,但是针对那些二维数组中含很多0(无意义)的情况就需要使用,稀疏数组压缩
- 当一个数组大部分元素为0,或同一个值时,就可使用稀疏数组
问题:这种真的有用吗,以上图为例,77=49 降到 38=24,但如果有效值再多一倍那它的压缩就完全不存在了,这时有效值也只占16/49,大概1/3,这里就涉及到有效值占的比例了 - 二维数组转sparseArray思路:
1. 遍历二维数组,找到有效数据的个数sum
2. 根据sun创建sparseArray,int[sum+1][3]//+1是因为第一行的三个值分别为原始二维数组的行数,列数,有效值个数
3. 将二维数组的每个有效值依次填入sparseArray
4. - sparseArray转二维数组
1. 根据sparseArray的第一行创建二维数组 int[sparseArray[0][0]][sparseArray[0][1]]
2. 再将每个值导入到二维数组的对应位置 -
}public class sparseArray { public static void main(String[] args) { int[][] doubleArr= new int[11][11]; for (int i = 0; i < 11; i++) {//for循环快捷键 fori for (int j = 0; j <11 ; j++) { doubleArr[i][j]=0; } } doubleArr[1][2]=1; doubleArr[2][3]=2; doubleArr[2][4]=2; doubleArr[2][7]=2; for (int i = 0; i <11 ; i++) { for (int j = 0; j < 11; j++) { System.out.printf( doubleArr[i][j]+"\t"); } System.out.println(); } //二维数组转为sparseArr int sum=0; for (int i = 0; i <11 ; i++) { for (int j = 0; j < 11; j++) { if(doubleArr[i][j]!=0){ sum++; } } } int[][] sArr = new int[sum+1][3]; sArr[0][0] = 11; sArr[0][1] = 11; sArr[0][2] = sum; int start=1; for (int i = 0; i <11; i++) { for (int j = 0; j < 11; j++) { if(doubleArr[i][j] != 0){ sArr[start][0]=i; sArr[start][1]=j; sArr[start][2]=doubleArr[i][j]; start++; } } } for (int i = 0; i <sum+1; i++) { for (int j = 0; j <3; j++) { System.out.print(sArr[i][j]+"\t"); } System.out.println(); } }