数据结构与算法(1)-稀疏数组
时间:2019-12-16
本文章向大家介绍数据结构与算法(1)-稀疏数组,主要包括数据结构与算法(1)-稀疏数组使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
概念
所谓稀疏数组就是数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用。因此造成内存空间的浪费,为了节省内存空间,并且不影响数组中原有的内容值,我们可以采用一种压缩的方式来表示稀疏数组的内容
问题
需要将原始数组转换成二维数组是关键。
实现
二维数组转稀疏数组的思路:
1.遍历数组,得到有效数据的个数sum,得到原始数组的大小。
2.根据sum的值创建稀疏数组sparseArray,次数组的一共有3列 ,根据sum的值确定有多少行。
3.将二维数组的有效数据存入到稀疏数组中。
package io.gjf.T01_Sparsearray;
/**
* Create by GuoJF on 2019/12/16
*/
public class App {
public static void main(String[] args) {
/*
*
* 首先创建原始数组
* */
int[][] originalArray = new int[9][9];
/*
* 手动为数组中的两个位置赋值
* */
originalArray[0][1] = 1;
originalArray[2][1] = 2;
for (int[] values : originalArray) {
for (int value : values) {
System.out.print(value + "\t");
}
System.out.println();
}
/*
* 获取到数组的长度 | 纵向长度
* */
int length = originalArray.length;
/*
* 获取到数组的 "宽"度 | 横向长度
* */
int width = originalArray[1].length;
/*
* 设置count 存储有效值个数
* */
int count = 0;
/*
* 获取数组中有几个有效值
* */
for (int[] values : originalArray) {
for (int value : values) {
if (value != 0) {
count++;
}
}
}
/*
* 创建稀疏数组
* */
int[][] sparseArray = new int[count + 1][3];
/*
* 设置稀疏数组第一行的值
* */
sparseArray[0][0] = length;
sparseArray[0][1] = width;
sparseArray[0][2] = count;
int cycleNum = 0;
for (int i = 0; i < originalArray.length; i++) {
for (int j = 0; j < originalArray.length; j++) {
int currentValue = originalArray[i][j];
if (currentValue != 0) {
sparseArray[cycleNum + 1][0] = i;
sparseArray[cycleNum + 1][1] = j;
sparseArray[cycleNum + 1][2] = currentValue;
cycleNum++;
}
}
}
for (int[] values : sparseArray) {
for (int value : values) {
System.out.print(value + "\t");
}
System.out.println();
}
}
}
运行结果
0 1 0 0 0 0 0 0 0
0 0 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 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
9 9 2
0 1 1
2 1 2
稀疏数组转二维数组的思路:
1.先读取稀疏数组的第一行,得到元数据的有几行几列以及有多少个值,创建原始数组。
2.再读取稀疏数组的后几行的数据, 并赋值给原始的二维数组。
package io.gjf.T01_Sparsearray;
/**
* Create by GuoJF on 2019/12/16
*/
public class App_SpareArrayToOriginal {
public static void main(String[] args) {
int[][] sparseArray = new int[3][3];
sparseArray[0][0] = 9;
sparseArray[0][1] = 9;
sparseArray[0][2] = 2;
sparseArray[1][0] = 0;
sparseArray[1][1] = 1;
sparseArray[1][2] = 1;
sparseArray[2][0] = 2;
sparseArray[2][1] = 1;
sparseArray[2][2] = 2;
for (int[] values : sparseArray) {
for (int value : values) {
System.out.print(value + "\t");
}
System.out.println();
}
/*
* 得到原始数组的长度
* 得到原始数组的宽度
* */
int length = sparseArray[0][0];
int width = sparseArray[0][1];
int valueSum = sparseArray[0][2];
int[][] originalArray = new int[length][width];
for (int i = 0; i < valueSum; i++) {
int i0 = sparseArray[i + 1][0];
int i1 = sparseArray[i + 1][1];
int i2 = sparseArray[i + 1][2];
originalArray[i0][i1] = i2;
}
for (int[] values : originalArray) {
for (int value : values) {
System.out.print(value + "\t");
}
System.out.println();
}
}
}
9 9 2
0 1 1
2 1 2
0 1 0 0 0 0 0 0 0
0 0 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 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
原文地址:https://www.cnblogs.com/iamgjf/p/12051690.html
- Github 项目推荐 | 用 Pytorch 实现的 WaveNet-Vocoder
- 重启数据库的一场闹剧(r5笔记第68天)
- 【C语言系列】基础语法案例分析(初级篇)
- 一次ORA-00600问题的排查和分析(r5笔记第64、65天)
- SpringMVC入门就这么简单
- pl/sql中的forall简单测试(r5笔记第63天)
- SpringMVC【开发Controller】详解
- 巧用外部表备份历史数据(r5笔记第62天)
- Github 项目推荐 | 最小化类 AlphaGo Zero 引擎 —— Nochi
- 半自动化运维之快速连接到指定环境(一) (r5笔记第61天)
- Spring【DAO模块】知识要点
- 浅谈exp/imp(上) (r5笔记第81天)
- Java高并发秒杀系统【观后总结】
- 【专业技术】引擎算法探究
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法