数据结构与算法
稀疏数组
-
什么是稀疏数组?
在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度.(来源:百度百科) -
稀疏数组图解
-
稀疏数组代码(Java版本)
// 构建一个二维数组
int[][] cheerTab = new int[11][11];
cheerTab[2][3] = 1;
cheerTab[4][6] = 2;
System.out.println("原数组:");
for (int[] rows : cheerTab) {
for (int item : rows) {
System.out.print(item+" ");
}
System.out.println();
}
// 二维数组转稀疏数组
// 稀疏数组行数 1+有值元素数 列数:3 第一列:行坐标 第二列:纵坐标 第三列:元素值
int num = 0;// 有值元素个数
int colNum = 0;
for (int i = 0; i < cheerTab.length; i++) {
for (int j = 0; j < cheerTab[i].length; j++) {
if (cheerTab[i][j]!=0){
num++;
}
colNum = j;
}
}
int[][] sparseArr = new int[num+1][3];
// 稀疏数组第一行 [行数][列数][有值数]
sparseArr[0][0] = cheerTab.length;
sparseArr[0][1] = colNum+1;
sparseArr[0][2] = num;
int count = 0;// 记录第几个非0值
for (int i = 0; i < cheerTab.length; i++) {
for (int j = 0; j < cheerTab[i].length; j++) {
if (cheerTab[i][j]!=0){
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = cheerTab[i][j];
}
}
}
System.out.println("稀疏数组:");
for (int[] ints : sparseArr) {
System.out.println(ints[0]+" "+ints[1]+" "+ints[2]+" ");
}
// 稀疏数组转二维数组
int[][] arr = new int[sparseArr[0][1]][sparseArr[0][1]];
for (int i = 1; i < sparseArr.length; i++) {
arr[sparseArr[i][0]][sparseArr[i][1]]= sparseArr[i][2];
}
System.out.println("稀疏数组转二维数组");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}