稀疏数组
2023/4/24 1:22:16
本文主要是介绍稀疏数组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
实际问题:
1)基本介绍
当一个数组中大部分元素都是0、或大部分都是相同的元素时,可以使用稀疏数组来保存此数组
处理方法:
-
第一行记录数组一共有几行几列,有多少个不同的值
-
把具有不同值的元素的行、列、值,记录在一个小规模的数组中,从而缩小程序规模
2)应用实例
代码实现:
package DataStructures.SparseArray; import java.io.Serializable; /** * @author Loe. * @project DataStructures&Algorithms * @date 2023/4/23 * @ClassInfo */ public class Main { public static void main(String[] args) { //初始化原始数组,并赋值 int[][] maps = new int[11][11]; maps[1][2] = 1; maps[2][3] = 2; System.out.println("原始数组"); printArray(maps); //进行稀疏操作 SparsArray sparsArray = new SparsArray(0, maps); System.out.println(); //打印稀疏后的数组 System.out.println("稀疏操作后的数组"); printArray(sparsArray.getSparsArray()); System.out.println(); //从稀疏数组恢复到原始数组 System.out.println("恢复后的数组"); int[][] sourceArray = sparsArray.reduction(); printArray(sourceArray); //将此稀疏数组对象持久化 } public static void printArray(int[][] maps) { for (int i = 0; i < maps.length; i++) { for (int j = 0; j < maps[i].length; j++) { System.out.print(maps[i][j] + " "); } System.out.println(); } } } //实现稀疏数组 class SparsArray implements Serializable { //默认值 public int defaultVal; //数组相关 public int row; public int col = 3; //有效的数据 int useAbleDataCount; //稀疏数组 public int[][] sparsArray; //初始化数组 public SparsArray(int defaultVal, int[][] targetArr) { this.defaultVal = defaultVal; //获取可用的数据数量 this.useAbleDataCount = countDataNums(targetArr); //初始化对象稀疏数组 this.sparsArray = new int[useAbleDataCount + 1][3]; //稀疏数组赋值 spars(targetArr); } //遍历数组,统计有效的数据 public int countDataNums(int[][] maps) { int count = 0; for (int i = 0; i < maps.length; i++) { for (int j = 0; j < maps[i].length; j++) { if (!(maps[i][j] == defaultVal)) { count++; } } } return count; } public void spars(int[][] targetArr) { //当前稀疏数组的行 int sparsRow = 1; //记录原始数组的信息 this.sparsArray[0][0] = targetArr.length; this.sparsArray[0][1] = targetArr[0].length; this.sparsArray[0][2] = this.useAbleDataCount; for (int i = 0; i < targetArr.length; i++) { for (int j = 0; j < targetArr[i].length; j++) { if (!(targetArr[i][j] == defaultVal)) { sparsArray[sparsRow][0] = i; sparsArray[sparsRow][1] = j; sparsArray[sparsRow][2] = targetArr[i][j]; sparsRow++; } } } } //从稀疏数组还原到原来的数组 public int[][] reduction() { //创建恢复的数组 int[][] reductionArr = new int[sparsArray[0][0]][sparsArray[0][1]]; //稀疏数组当前行 int row = 1; //遍历恢复的数组,并恢复对应值 for (int i = 0; i < reductionArr.length; i++) { for (int j = 0; j < reductionArr[i].length; j++) { //如果已经将有效数据全部恢复 if (row <= useAbleDataCount) { System.out.println(row); //还没有将数据全部恢复,继续判断 if (i == sparsArray[row][0] && j == sparsArray[row][1]){ reductionArr[i][j] = sparsArray[row][2]; row++; } } else { reductionArr[i][j] = this.defaultVal; } } } return reductionArr; } public int[][] getSparsArray() { return sparsArray; } }
这篇关于稀疏数组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南