稀疏数组是一种用于表示大部分元素值为默认值的二维数组的数据结构。它通过只存储非默认值的元素及其对应的索引来节省内存空间。稀疏数组通常用于处理具有大量默认值的稀疏矩阵或稀疏数据集。
稀疏数组的结构如下:
- 第一行:稀疏数组的行数、列数和非默认值元素的个数。
- 接下来的行:每行存储一个非默认值元素的行索引、列索引和值。
稀疏数组的优点是可以节省内存空间,因为它只存储非默认值的元素,而默认值可以通过索引推断出来。这在处理稀疏矩阵或稀疏数据集时特别有用,因为这些数据通常具有大量的默认值。
稀疏数组的使用步骤如下:
- 遍历原始数组,统计非默认值元素的个数。
- 创建稀疏数组,第一行存储原始数组的行数、列数和非默认值元素的个数。
- 遍历原始数组,将非默认值元素的行索引、列索引和值存储到稀疏数组中。
在需要使用稀疏数组时,可以根据稀疏数组的结构进行相应的操作,如读取非默认值元素、修改非默认值元素或将稀疏数组转换回原始数组。
需要注意的是,稀疏数组的使用需要进行转换操作,因此在实际应用中需要根据具体需求进行设计和处理。在某些情况下,使用现有的稀疏数组库或算法可以更高效地处理稀疏数据。
当一个数组中大部分元素为0的时候,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组处理的方式:
- 记录数组一共有几行几列,有多少个不同的值。
- 把具有不同的元素的行列及值记录在一个小规模数组中,从而缩小程序的规模。
public class 稀疏数组 {
public static void main(String[] args) {
//创建一个原始的二维数组
//0 :表示没有棋子,1表示黑子,2表示白字
int chessArr1[][] = new int [11][11];
chessArr1[1][2] =1;
chessArr1[2][3] = 2;
//输出原始数组
System.out.println("原始的二维为:");
for(int [] row : chessArr1) {
for(int data: row) {
System.out.printf("%d ",data);
}
System.out.println();
}
//将二维数组转稀疏数组
// 1先遍历二维数组得到0数据的个数
int sum = 0;
for(int i = 0; i < 11 ; i++) {
for(int j = 0; j < 11 ; j++) {
if(chessArr1[i][j] != 0) {
sum ++;
}
}
}
//创建对应的稀疏数组
int sparseArr[][] = new int [sum +1][3];
//给稀疏数组赋值
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
int count = 0;
//遍历二维数组,将非0的值存放到sparseArr中
for(int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if(chessArr1[i][j] != 0) {
count ++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr1[i][j];
}
}
}
//输出稀疏数组的形式
System.out.println();
System.out.println("得到的稀疏数组");
for(int i = 0; i < sparseArr.length ; i++) {
System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
}
//将稀疏数组回复为原来的数组
//第一步,先读取稀疏数组的第一行,根据第一行的数据创建原始的二维数组
int chessArr2[][] = new int [sparseArr[0][0]][sparseArr[0][1]];
//第二部,在稀疏数组后的几行的数据从第二行开始,并赋值给原始的二维数组
for(int i =1; i < sparseArr.length; i++) {
chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
//输出恢复后的二维数组
System.out.println();
System.out.println("恢复后的二维数组");
for(int [] row : chessArr2) {
for(int data: row) {
System.out.printf("%d ",data);
}
System.out.println();
}
}
}
总结起来,稀疏数组是一种用于表示大部分元素值为默认值的二维数组的数据结构,通过只存储非默认值的元素及其对应的索引来节省内存空间。它在处理稀疏矩阵或稀疏数据集时可以提供内存效率和性能优势。