稀疏数组(sparsearray)
- 有什么用
在二维数组中如果有很多值是默认值0,因此记录了很多没有意义的数据,需要使用稀疏数组来存储
-
处理方法
1.记录数组一共有几行几列,有多少个不同值
2.把具有不同值得元素的行列和值记录在小规模的数组中,缩小程序的规模
例如:
行(row) | 列(col) | 值(value) | |
---|---|---|---|
[0] | 6 | 7 | 8 |
[1] | 1 | 2 | 6 |
[2] | 2 | 2 | 6 |
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();
}
}