关于稀疏数组
2021-03-02 04:26
标签:parse 返回 修改 style 转换 调用 个数 blank 增强 比如这个棋盘,如果要记录黑蓝棋子的位置首先会想到运用二维数组,我们把二维数组建好后(1是黑,2是蓝),发现很多空白位置浪费了大量的内存空间 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来存储给数组。我们这个时候可以用稀疏数组来存储“有效数据” 稀疏数组一共有三列(列固定),分别表示行号,列号和值 第一行:记录初始数组的总共行、总共列、有效值的个数(有意义的值) 其他行:逐次记录有效值的行号、列号和值 由图可知,稀疏数组总行数为有效值 + 1 (假设有效值为num)行数为num + 1, 列数固定为3。 (左图为二维数组,右图为稀疏数组) 实例:(以下定义了一个方法用来转换矩阵二维数组转换为稀疏数组) (二维数组类型不同可重载,可直接修改方法中的 int) 完整实例: 输出结果为: 实例:(以下定义了将稀疏数组转换为原始二维数组的方法) 完整实例: 输出结果为: 参考链接https://blog.csdn.net/lujiangui/article/details/107581007 参考链接https://www.cnblogs.com/han200113/p/11515327.html 关于稀疏数组 标签:parse 返回 修改 style 转换 调用 个数 blank 增强 原文地址:https://www.cnblogs.com/MusicDay/p/14413950.htmlⅠ、为什么用稀疏数组?
Ⅱ、怎么使用稀疏数组?
Ⅲ、二维数组转稀疏数组
// 定义一个将原始二维数组转换为稀疏数组的方法 (传入参数必须是矩阵二维数组)
public static int[][] toSparseArray(int[][] array){
int sum = 0; // 用来存储有效值的个数
// 通过for each增强循环遍历确定有效值的个数
for (int[] a: array) {
for (int b: a) {
if (b != 0){
sum ++;
}
}
}
// 创建稀疏数组SparseArray (行数为有效值 + 1, 列数固定为3)
int[][] SparseArray = new int[sum + 1][3];
// 给稀疏数组ParseArray第一行赋值
SparseArray[0][0] = array.length; // 原始二维数组最外层的元素个数
SparseArray[0][1] = array[0].length; // 原始二维数组最里层的元素个数
SparseArray[0][2] = sum; // 原始二维数组的有效值 + 1
// 遍历原始二维数组将有效值赋值给稀疏数组
int row = 1; // 用来更新赋值给稀疏数组的行数
for (int i = 0; i ) {
for (int j = 0; j ) {
if (array[i][j] != 0){
SparseArray[row][0] = i; // 有效值的行
SparseArray[row][1] = j; // 有效值列
SparseArray[row][2] = array[i][j]; // 有效值的值
row++;
}
}
}
return SparseArray; // 返回转换后的稀疏数组
}
public class MusicDay {
public static void main(String[] args) {
// 声明创建一个原始二维数组 (8 * 8)
int[][] array = new int[8][8];
array[1][2] = 1;
array[2][3] = 2;
// for-each增强循环遍历原始二维数组 输出原始二维数组
System.out.println("原始二维数组为:");
for (int[] b : array) {
for (int c: b) {
System.out.print(c + "\t");
}
System.out.println();
}
// 调用方法并接收转换为稀疏数组的返回值
int[][] SparseArray = toSparseArray(array);
System.out.println("转换为稀疏数组为:");
// for-each增强循环遍历转换后的稀疏数组 输出稀疏数组
for (int[] b : SparseArray) {
for (int c: b) {
System.out.print(c + "\t");
}
System.out.println();
}
}
// ==============================================================
// 定义一个将原始二维数组转换为稀疏数组的方法 (传入参数必须是矩阵)
public static int[][] toSparseArray(int[][] array){
int sum = 0; // 用来存储有效值的个数
// 通过for each增强循环遍历确定有效值的个数
for (int[] a: array) {
for (int b: a) {
if (b != 0){
sum ++;
}
}
}
// 创建稀疏数组SparseArray (行为有效值 + 1, 列固定为3)
int[][] SparseArray = new int[sum + 1][3];
// 给稀疏数组ParseArray第一行赋值
SparseArray[0][0] = array.length; // 原始二维数组最外层的元素个数
SparseArray[0][1] = array[0].length; // 原始二维数组最里层的元素个数
SparseArray[0][2] = sum; // 原始二维数组的有效值 + 1
// 遍历原始二维数组将有效值赋值给稀疏数组
int row = 1; // 用来更新稀疏数组赋值的行数
for (int i = 0; i ) {
for (int j = 0; j ) {
if (array[i][j] != 0){
SparseArray[row][0] = i; // i为有效值的行
SparseArray[row][1] = j; // j为有效值的列
SparseArray[row][2] = array[i][j]; // 有效值的值
row++;
}
}
}
return SparseArray; // 返回转换后的稀疏数组
}
}原始二维数组为:
0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 2 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
转换为稀疏数组为:
8 8 2
1 2 1
2 3 2
Ⅳ、稀疏数组转原始数组
// 定义toArray方法作用为将稀疏数组转换为原始二维数组
public static int[][] toArray(int[][] SparseArray){
// 通过稀疏数组的第一行前两个元素确定原始二维数组的行数列数
int[][] Array = new int[SparseArray[0][0]][SparseArray[0][1]];
// 通过循环为原始二维数组赋值
for (int i = 1; i ) {
Array[SparseArray[i][0]][SparseArray[i][1]] = SparseArray[i][2];
}
return Array; // 返回转换后的原始二维数组
}
public class MusicDay {
public static void main(String[] args) {
// 声明创建稀疏数组 第一个3代表有2个有效值,第二个3为稀疏数组固定列数。
int[][] SparseArray = new int[3][3];
// 为稀疏数组赋值
SparseArray[0][0] = 8; // 对应二维数组的行数
SparseArray[0][1] = 8; // 对应二维数组的列数
SparseArray[0][2] = 2; // 有效值的个数
SparseArray[1][0] = 2; // 第一个有效值的行数
SparseArray[1][1] = 3; // 第一个有效值的行数
SparseArray[1][2] = 1; // 第一个有效值的具体值
SparseArray[2][0] = 3;
SparseArray[2][1] = 4;
SparseArray[2][2] = 2;
// 输出创建的稀疏数组
System.out.println("稀疏数组为:");
for (int[] a: SparseArray) {
for (int b: a) {
System.out.print(b + "\t");
}
System.out.println();
}
// 调用toArray方法并接收返回转换后的原始二维数组
int [][] Array = toArray(SparseArray);
// 输出转换后的原始二维数组
System.out.println("转换后的原始二维数组为:");
for (int[] a: Array) {
for (int b: a) {
System.out.print(b + "\t");
}
System.out.println();
}
}
// =======================================================
// 定义toArray方法作用为将稀疏数组转换为原始二维数组
public static int[][] toArray(int[][] SparseArray){
// 通过稀疏数组的第一行前两个元素确定原始二维数组的行数列数
int[][] Array = new int[SparseArray[0][0]][SparseArray[0][1]];
// 通过循环为原始二维数组赋值
for (int i = 1; i ) {
Array[SparseArray[i][0]][SparseArray[i][1]] = SparseArray[i][2];
}
return Array; // 返回转换后的原始二维数组
}
}稀疏数组为:
8 8 2
2 3 1
3 4 2
转换后的原始二维数组为:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 2 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
上一篇:爬虫之多线程,提高效率
下一篇:JavaSE的学习之路