稀疏数组
例子
基本介绍
当一个数组中的大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
系数数组的处理方法
(1)记录数组一共有几行几列,有多少个不同的值
(2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
案例
[0]第一行记录数组有几行几列,第三列是数组中总共有几个不同的值
[1]-[8]几行几列所对应的值为多少
思路分析
代码实现:
package my.sust;
public class Chess {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] chessary=new int[11][11];
chessary[1][2]=1;
chessary[2][3]=2;
chessary[4][5]=1;
System.out.println("原始的二维数组");
for(int[] row :chessary) {
for(int data : row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
//棋盘转换为稀疏数组
int a[][] = sparsearray(chessary);
for(int[] row :a) {
for(int data : row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
int b[][] = sparse(a);
for(int[] row :b) {
for(int data : row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
}
public static int[][] sparsearray(int[][] chessary){//棋盘转换为稀疏数组
int sum = 0;
for(int i=0;i<chessary.length;i++) {
for(int j=0;j<chessary[0].length;j++) {
if(chessary[i][j] != 0) {
sum++;
}
}
}
int[][] array = new int[sum+1][3];
array[0][0] = chessary.length;//读取棋盘的行row
array[0][1] = chessary[0].length;//读取棋盘的列co
array[0][2] = sum;
int count = 0;//计数器作用,有一次非0的值,就用count作为array中的行号
for(int i=0;i<chessary.length;i++) {
for(int j=0;j<chessary[0].length;j++) {
if(chessary[i][j] != 0) {
count++;
array[count][0] = i;
array[count][1] = j;
array[count][2] = chessary[i][j];
}
}
}
return array;
}
public static int[][] sparse(int[][] array){
int row = array[0][0];
int co = array[0][1];
int sum = array[0][2];
int[][] chessary = new int[row][co];
for(int i=1;i<row;i++) {
for(int j=0;j<co;j++) {
chessary[i][j] = 0;
}
}
for(int i=1;i<sum+1;i++) {
for(int j=0;j<3;j++) {
int x = array[i][0];
int y = array[i][1];
chessary[x][y] = array[i][2];
}
}
return chessary;
}
}