数据结构之稀疏数组,保存到磁盘,从磁盘中读取

HCIA重点知识 华为认证ICT工程师,是华为认证体系中用于标识个人能力在某一技术领域达到工程师级别的证明,表示通过认证的人员具备安装、配置、运行 ICT 设备,并进行基础故障排除的能力。抽象语言 -----> 编码 -----> 二进制 -----> 电信号 -----> 处理电信号信号的转换标准:协议,是一种允许电子设备相互交流的一系列标准的规则。即开放系统参考模型OSI/RM,简称“OSI”。OSI参考模型将计算机网络分为七个层次,自上而下依次为:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。1、应用层: 阅读详情

稀疏数组保存到磁盘,从磁盘中读取

一、数据结构包括:线性结构和非线性结构

① 线性结构
(1)、线性数据结构作为最常见的数据结构,其特点是数据元素之间存在一对一的线性关系
(2)、线性数据结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表),顺序存储的线性表称为顺序表,顺序表中存储的元素是连续的。
(3)、链式存储的线性表称之为链表,链表中存储的元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址值。
(4)、线性结构常见的有:数组、队列、链表和栈
② 非线性结构
(1)、非线性结构包括、二维数组,多维数组,广义表,树结构,图结构

二、稀疏数组(sparse array)

1)、当一个数组中有大部分元素为一个值时,可以使用稀疏数组来保存改值,
2)、稀疏数组的处理办法是:
a.记录数组一共有几行几列,有多少个不同的值
b.把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。

3)、应用场景五子棋
在这里插入图片描述
原始的二位数组,有很多没有意义的数据,所以使用稀疏数组。
在这里插入图片描述
在这里插入图片描述
4)、二维转稀疏数组的思路
a.遍历原始的二维数组,得到有效数据的个数sum
b.根据sum可以创建稀疏数组sparseArr int[sum+1,3]
c.将二维数组的有效数据存到稀疏数组中
d.最后把稀疏数组放到文件中保存起来,做到存盘

5)、 稀疏数组转二维数组
a.从文件中解析出稀疏数组
b.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的chessArr2 int [11][11]
c.在读取稀疏数组后几行的数组,并赋予给原始的二维数组即可
d.做到复盘

补充知识点:/与%,除与取模

三、代码实现

import java.io.*;
public class SparseArray {
	public static void main(String[] args) throws Exception {
		//创建一个原始的二维数组 11*11,0表示没有棋子,1表示黑子,2表示白字
		int chessArr1[] []= new int[11][11];
		chessArr1[1][2]=1;
		chessArr1[2][3]=2;
		//输出原始的二维数组
		System.out.println("原始的二维数组");
		for (int[] row: chessArr1) {
			for (int data:row){
				System.out.printf("%d\t",data);
			}
			System.out.println();
		}
		// 将二维数组转稀疏数组
		//① 先遍历二维数组得到非0的数据个数
		int sum = 0;
		for (int i = 0; i < chessArr1.length; i++) {
			for (int j = 0; j < chessArr1.length; j++) {
				if (chessArr1[i][j]!=0){
					sum++;
				}
			}
		}
		//创建对应的稀疏数组
		int sparseArr[][]=new int[sum+1][3];

		//给稀疏数组赋值
		sparseArr[0][0]=11;
		sparseArr[0][1]=11;
		sparseArr[0][2]=sum;

		//遍历二维数组,将非零的值存放到稀疏数组中。
		int count = 0; //count用于记录是第几个非零数据
		for (int i = 0; i < chessArr1.length; i++) {
			for (int j = 0; j < chessArr1.length; j++) {
				if (chessArr1[i][j]!=0){
					count++;
					sparseArr[count][0]=i;
					sparseArr[count][1]=j;
					sparseArr[count][2]=chessArr1[i][j];
				}
			}
		}

		//输出稀疏数组的形式,%d\t每个一个值换行
		System.out.println("得到的稀疏数组如下+++++++++++++++++");
		for (int i = 0; i < sparseArr.length; i++) {
			System.out.printf("%d\t%d\t%d\t",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
			System.out.println();
		}
		//将稀疏数组写入文件中,文件名为map.data
		System.out.println("将稀疏数组写入文件map.data中");
		File file = new File("D:\\尚硅谷韩顺平老师数据结构分享\\map.data");
		FileOutputStream outputStream = new FileOutputStream(file);
		OutputStreamWriter writer = new OutputStreamWriter(outputStream,"utf-8");
		for (int i = 0; i < sparseArr.length; i++) {
			if (i== sparseArr.length-1){
				writer.write(sparseArr[i][0]+","+sparseArr[i][1]+","+sparseArr[i][2]);
			}else {
				writer.write(sparseArr[i][0]+","+sparseArr[i][1]+","+sparseArr[i][2]+",");
			}
		}
		writer.close();
		outputStream.close();
		System.out.println("写入成功");


		// 稀疏数组转二维数组,首先读取文件
		FileInputStream inputStream = new FileInputStream(file);
		InputStreamReader reader = new InputStreamReader(inputStream,"utf-8");
		StringBuffer sb = new StringBuffer();
		while (reader.ready()){
			sb.append((char) reader.read());//加入stringbuffer,转为char,不然只会打印地址
		}
		System.out.println("读出的文件"+sb.toString());
		reader.close();
		inputStream.close();

		//把读出的文件,赋值给稀疏数组
		String[] str = sb.toString().split(",");
		System.out.println(str.length/3);
		int sparseArray3[][]= new int[str.length/3][3];
		int i= 0;
		for (String  s:str) {
			System.out.println(i%3);
			sparseArray3[i/3][i%3] =Integer.parseInt(s);
			i++;
		}

		//输出读取到的稀疏数组
		System.out.println("输出读取到的稀疏数组如下+++++++++++++++++");
		for (int k = 0; k < sparseArray3.length; k++) {
			System.out.printf("%d\t%d\t%d\t",sparseArray3[k][0],sparseArray3[k][1],sparseArray3[k][2]);
			System.out.println();
		}
		//①先读取稀疏数组第一行,找出二维数组多大
		int charArray2[][]= new int[sparseArray3[0][0]][sparseArray3[0][1]];

		//②读取稀疏数组中的值,给到二维数组,从第二行开始,第一行存的是多少row ,多少列,有几个有效值
		for (int l = 1; l < sparseArr.length; l++) {
				charArray2[sparseArr[l][0]][sparseArray3[l][1]]=sparseArray3[l][2];

		}

		//恢复后的二维数组
		System.out.println("恢复后的二维数组");
		for (int[] row:charArray2) {
			for (int data:row) {
				System.out.printf("%d\t",data);
			}
			System.out.println();

		}
	}
}

【2026年华为暑期实习(AI)-4月29日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试) 本文摘要涵盖了机器学习和深度学习中的多个核心概念与技术,包括非负矩阵分解、条件数、MobileNet创新点、LDA降维、大模型评测指标、半精度训练、多任务学习、GPU存储层次、正则化、张量并行等。通过12道单选题和8道多选题的形式,系统性地考察了相关理论原理、应用场景及工程实践要点。题目设计注重概念准确性(如LDA目标函数)、技术细节(如Megatron-LM的并行策略)与实际应用(如FP16训练动机),并包含概率统计(二项分布)和数值计算(微分误差分析)等数学基础内容,全面检验读者对AI领域关键知识的掌握 阅读详情

相关推荐

PSIM仿真实战:反激电源从设计到调试的完整流程(附短路保护配置)

本文详细介绍了使用PSIM仿真工具进行反激电源从设计到调试的完整流程,包括变压器参数设计、功率器件选型、动态特性调试以及短路保护配置。通过实战案例和仿真技巧,帮助工程师提前暴露并解决设计中的常见问题,如负载突变、输入电压波动和短路保护失效等,显著降低硬件试错成本。

weixin_29216353的博客 244

数据结构:稀疏数组的存储

避免部分同学不懂什么是稀疏数组,这里介绍一下稀疏数组 思路: 遍历原来的数组,记录下来元素的有效数据个数sum 创建一个矩阵 int[sun+1][3] 第一行记录元素的行数,列数和sum 后面的每一行记录的是有效数据的位置(行,列,值) 然后保存这个新创建的数组 恢复: 读取保存的文件,然后得到原始数组有几行几列,几个有效值 然后创建数组,将有效值回归到原位 ...

不再彷惶 578

电流采样电路设计:差分放大与ADC采集详解

在电机控制、电源管理、电池监测等应用中,电流采样是一个关键环节。通常,我们使用小阻值的采样电阻将电流信号转换为电压信号,再通过运放放大后送入ADC进行采集。本文将详细分析一种基于差分放大器的电流采样电路,包括信号放大、参考电压偏置、滤波保护以及ADC转换计算等内容。

W0s477的博客 2万+

数据结构之稀疏数组

跟着B站尚硅谷老韩的数据结构进行学习,所做的笔记。!我会持续更新。当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。记录数组一共有几行几列,有多少个不同的值。数组固定为3列把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模!!❤️❤️❤️❤️❤️。

小辉的编程学习记录 183

OpenCvSharp之利用海康相机采集图像并在pictureBox中显示

OpenCvSharp之利用海康相机采集图像并在pictureBox中显示 说明:OpenCvSharp版本为4.0 海康相机为黑白相机 实现功能:将海康相机采集的图像转成Mat,并在pictureBox中显示。 示例代码: Mat srcImage; private Mat CaptureImage() { int nRet; //MyCamera.MVCC_I...

Kevin_Sun777的博客 5502

蚂蚁区块链第20课 可信存证司法链从入门到实施

1. 摘要 杭州互联网法院和司法区块链平台的技术建设方都是蚂蚁金服区块链。那么,如何借助蚂蚁的技术能力和服务能力,快速对接上司法链,便于后续打通存证/维权的闭环流程。本文介绍蚂蚁区块链可信存证的业务及特点,费用及接入方法等,具有实战指导意义。 2. 蚂蚁区块链可信存证的介绍 蚂蚁区块链可信存证具备全链路可信,司法权威节点见证,安全隐私保护,一站式接入能力,全国首家法律认可的区块链存证平台。 2...

辉哥的技术投资路 6087

数据结构中的稀疏数组、队列和链表详解(java语言)

一.数据结构与算法简介 学习视频推荐 1.1几个经典的算法面试题 ➢字符串匹配问题: : 1)有一个字符串str1= ““硅硅谷 尚硅谷你尚硅尚硅谷你尚硅谷你尚硅你好””,和一-个子串str2=“尚硅谷你尚硅你” 2)现在要判断str1 是否含有str2, 如果存在,就返回第一次出现的位置,如果没有,则返回-1 3)要求用最快的速度来完成匹配 4)你的思路是什么? ●暴力匹配 [简单,但是效率低] ●KMP算法《部分匹配表》 ➢汉诺塔游戏,请完成汉诺塔游戏的代码: 要求: 1)将A塔的所有圆盘移动到C塔。

梦想不是挂在嘴边炫耀的空气,而是需要认真实践,等到对的风,就展翅翱翔! 298

遥感目标检测数据集汇总

文章目录1. 光学数据集1.1 DIOR1.2 LEVIR1.3 DOTA1.4 RSOD1.5 NWPU VHR-101.6 VEDAI1.7 COWC1.8 ITCVD1.9 DIUx xView 20181.10 HRSC20161.11 TAS1.12 SZTAKI‐INRIA1.13 UCAS AOD1.14 DLR 3K Vehicle2. SAR2.1 SSDD2.2 SSDD+2....

quanwei的博客 6万+

数据结构和算法-3.稀疏数据和队列

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结学习目标:学习内容:学习时间:学习产出: 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。

u014215131的博客 377

I2C 协议在 Camera Sensor 驱动中的典型配置方式与实战应用

在 Linux Camera 系统中,Sensor 与主控之间的控制信令几乎都依赖于 I2C 总线完成。I2C 协议不仅承载了 Sensor 初始化、模式切换、AE/AF 等关键功能的指令传输,也是构建 v4l2\_subdev 驱动框架的核心基础。本文将围绕 Sensor 驱动中的 I2C 通信机制展开分析,从设备树节点声明到驱动代码中的传输接口调用,结合主流平台工程实战经验,详解如何构建稳定、高效、可维护的 I2C 控制路径。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1713

ACS运动控制器编程语言

ACS运动控制器采用SPiiPlusLanguage(SPL)作为核心编程语言,该语言基于C语法设计,内置丰富的运动控制指令,支持点位运动、插补等复杂控制。控制器提供专用开发工具SPiiPlusManager和ACSStudio,支持图形化编程与调试。同时兼容TCP/IP、EtherCAT等多种扩展接口,便于与上位机或PLC集成。使用时需注意实时性优先级、轴参数匹配等关键事项。官方文档和示例程序为开发者提供了完善的学习资源。

StevenChen的博客 624

JAVA 将二维数组转化为稀疏数组保存到文件,再读取文件转化为二维数组

场景:将五子棋盘(二维数组)中,有效的数据保存到稀疏数组中并将稀疏数组保存到本地文件。然后将读取文件中的数据,并将数据转换成二维数组。 因为五子棋该二维数组中有很多值是默认值 0, 因此记录了很多没有意义的数据.所以这里使用到稀疏数组,保存有效数据。 解题思路: 二维数组 转 稀疏数组并存入本地文件: 1. 遍历原始的二维数组,得到有效数据的个数 sum 2. 根据sum 就可以创建 稀疏数组 sparseArr int[sum + 1] [3] 3. 将二维数组的有效数据数...

Sundy_sc的专栏 760

Allegro如何输出ODB文件操作指导

在PCB设计完成之后,需要输出生产文件用于生产加工,除了gerber文件可以用生产制造,ODB文件同样也可以用于生产,如下图。用Allegro如何输出ODB文件,具体操作如下。如何输出ODB文件操作指导。

weixin_54787054的博客 7212

数据结构之二维数组到稀疏数组,保存到磁盘,从磁盘中读取

JAVA数据结构二维数组=》稀疏数组,保存到磁盘,从磁盘中读取为稀疏数组=》二维数组

qq_44847284的博客 600

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

golang 普通数组、稀疏数组互相转换,稀疏数组落盘

package main import ( "bufio" "fmt" "io" "os" "strconv" "strings" ) //稀疏数组的基本使用 func main() { var arr [12][12]int arr[1][1] = 1 arr[2][2] = 2 for _,item := range arr { for _,val := range item { fmt.Printf("%d ",val) } fmt.Println("")

weixin_44540711的博客 249

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

稀疏数组(五子棋,IO)

package cn.gyk.shuzu; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.io.Writer; import java.util.ArrayList; public class Spa.

spades_seven的博客 313

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

数据结构和算法笔记_04、稀疏数组的思路分析、代码实现

数据结构和算法的重要性 算法是程序的灵魂,优秀的程序可以在海量数据计算时,依然保持高速计算 一般来讲 程序会使用了内存计算框架(比如Spark)和缓存技术(比如Redis等)来优化程序,再深入的思考一下,这些计算框架和缓存技术, 它的核心功能是哪个部分呢? 拿实际工作经历来说, 在Unix下开发服务器程序,功能是要支持上千万人同时在线, 在上线前,做内测,一切OK,可上线后,服务器就支撑不住了, 公司的CTO对代码进行优化,再次上线,坚如磐石。你就能感受到程序是有灵魂的,就是算法。 目前程序员...

鲁迷那的专栏—坚持实践后再写出来! 241

Java二维数组与稀疏数组转换

稀疏数组学习,稀疏数组与二维数组转换,稀疏数组保存到磁盘文件,从文件读取恢复稀疏数组

Unique1999的博客 182

数据结构与算法-001-二维数组转稀疏数组

数据结构与算法-001-二维数组转稀疏数组 写在前面: 记录对于数据结构的学习,第一天,加油!!! 二维数组存储了许多无效且重复的值,占用了许多空间,因此将二维数组转变为稀疏数组以此来减少对于空间的占用。 二维数组:表示一个 11 * 11 的棋盘,0:表示没有棋子,1:表示 黑子,2:表示 白子。 0 0 0 0 0 0 0 0 0 0 0 0 0 1 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

Anubis_Anpu_的博客 210

Java数据结构与算法———(2)将稀疏数组保存到磁盘上并恢复

将一个稀疏数组保存到磁盘上,命名为map.data。然后,再从磁盘读取map.data中的稀疏数组,将其恢复成原始的二维数组 一、代码如下: package com.atguigu.sparsearray; import java.io.*; import java.io.OutputStreamWriter; import java.io.InputStreamReader; public class SparseArray { public static void main(String[] a

GTboy100的博客 2799

将稀疏数组保存到磁盘上并恢复_课后作业

1、将稀疏数组保存到磁盘上,文件名map.data 读取map.data恢复稀疏数组 package com.atguigu.sparsearray; import java.awt.Desktop; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java....

是小陈啊 4257

Java数据结构与算法----将稀疏数组保存到磁盘,并恢复

练习: 将稀疏数组保存到磁盘,并恢复 //稀疏数组保存到磁盘,并恢复 import java.io.*; import java.io.OutputStreamWriter; import java.io.InputStreamReader; public class SparseArrSave{ public static void main(String[] args){ ...

别怕别怕的博客 1505

【数据结构与算法 1】稀疏数组

一、稀疏数组 1、概念 当一个数组中部分元素是0,或者为同一个值的数组,可以使用稀疏数组来保存该数据。 稀疏数组的处理方法: 记录数组一共有几行几列,有多少个不同的值; 把具有不同值的元素的行列和值记录在一个小规模的数组中,从而缩小程序的规模。 2、存储 原数组中存在大量的无效数据,占据了大量的存储空间,真正有用的数据却少之又少; 压缩存储可以节省存储空间以避免资源的不必要的浪费,在数据序列化到磁盘时,压缩存储可以提高IO效率。 二、代码实例 package com.atguigu.s

学Java,找哪吒 8886

数据结构 — 稀疏数组

在这次的博文中是关于 二维数组 与 稀疏数组 的转换且对于将稀疏数组的数据存于磁盘并读出:     注意:二维数组 转换成 稀疏数组 的目的是对数据进行压缩,避免无效数据占用空间;将数据保存于磁盘中是基于大量数据考虑的。 一、二维数组 转 稀疏数组 的思路 遍历原始的二维数组,得到有效数据的个数,用 变量sum 表示 根据 变量sum ,可以创建稀疏数组 将二维数组的有效数据存入到稀疏数组 二、将稀疏数组数据保存在磁盘中,之后读取磁盘数据,赋值给稀疏数组 &nbs

Hello_ChenLiYan的博客 298

1.JAVA稀疏数组(存到磁盘中,再从磁盘中读出)

注:这是看了尚硅谷,韩顺平老师《java数据结构和算法》视频后,做的笔记。 稀疏数组:是sum+1行,3列的 sum:原数组有效元素的个数(图中map 1 的个数) 稀疏数组第一行意思:原数组的行数,原数组的列数,有校值的个数 稀疏数组后面行意思:有效值所在的行数,有效值所在的列数,有效值 public class SparseArrayTest { public static void main(String[] args) throws IOException { // 定义一

HELANL的博客 1111

数据结构之实现稀疏数组_Java

Java实现稀疏数组以及将稀疏数组存储到硬盘和从硬盘种读取操作 本文使用Java来实现稀疏数组的一些操作 原二维数组–>稀疏数组 稀疏数组存储到硬盘 硬盘读取到list集合中 list–>新稀疏数组 新稀疏数组–>新二维数组 二维数组转稀疏数组 遍历原始的二维数组,得到有效数据的个数sum 根据sum就可以创建稀疏数组sparseArr 行:int[sum+1] ...

qq_45703872的博客 290
上一篇: Centos7安装redis
下一篇: 数据结构之队列
噢!不杰克
博客等级 码龄7年 4443粉丝 142原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值