数据结构和算法-稀疏数组转原始数组|学习笔记

简介: 快速学习数据结构和算法-稀疏数组转原始数组

开发者学堂课程【Go 语言核心编程 - 数据结构和算法:数据结构和算法-稀疏数组转原始数组】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/627/detail/9830


数据结构和算法-稀疏数组转原始数组

 

内容简介:

一、思路分析

二、代码实现

 

一、思路分析

恢复的时候直接去遍历文件,这个文件遍历一行就往里面扔一行,遍历一行就写一行,那么这个时候,因为没有去存盘,所以这简单的就直接从稀疏数组把它返回回来,待会要代码实现的时候,下图可供参考,

如下:

 image.png

 

二、代码实现

(1)稀疏数组转原始数组代码实现及运行结果

先找到之前写代码的位置,即打开 chapter20/sparsearray/main.go文件,接着在最后一行中输入代码,如下:

//将这个稀疏数组,存盘 d:/chessmap.data

//如何恢复原始数组

//1.打开这个 d:/chessmap.data => 恢复原始数组

//2.这里使用稀疏数组恢复

//先创建一个原始数组(这个数组规模大小怎么去做?标准的写法应该先读出它的数据,然后根据其两个数据,也就是根据存进去的这个11和那个11来决定原始数组的行和列,但是刚才已经讲过了,在 Go 语言中,在创业的时候,必须直接指定这个具体的数字,所以可以先做个切片,用切片来恢复就行了,这里就直接就写到这里)

var chessMap2 [11][11]int

//遍历 sparseArr[遍历文件每一行]

for _, valNode := range sparseArr {

chessMap2[valNode.row][valNode.col] = valNode.val

}

//看看 chessMap2 是不是恢复

fmt.Println(恢复后的原始数组......)

for _, v := range chessMap2

for _, v2 := range v {

fmt.Printf(%d\t, v2)

}

fmt.Println()

}

}

代码运行结果为:

image.png

(2)对以上代码运行结果的分析及改进

运行结果显示有问题,它说chessMap2[valNode.row][valNode.col] = valNode.val“有问题,这边有一个数组越界那么为什么出了问题?

是因为原先的数组里面,它记录11110这个其实目前没什么用处,这种情况来说没用,得跳过这个因为它是代表的你有几行几列的原始数据,将来的价值在什么地方?

别人如果问到,面试官问到你第一行的十一十一零是什么这个十一十一是用来确定将来二数组开多大这才有用,但是在 Golang 中,对二维数组来说,这两个数据它跳过去就行了,怎么跳?

非常简单,将以上部分的代码修改为以下代码:

//遍历 sparseArr [遍历文件每一行]

for i, valNode := range sparseArr {

if i != 0 {  

//跳过第一行记录值

chessMap2[valNode.row][valNode.col] = valNode.val

}

}

再来运行一遍以上代码,执行结果为

如下:

image.png

可以上图中,看到中间过渡是很清晰的,一个是原始的数组,一个是稀疏的数组,最后恢复过后,又变成了数字,当然具体的情况还要具体分析

(3)小结

如果想去用一个切片来做,也可以,可以把它改成一个切片去尝试做一做这里面的关键点不是讲是不是切片的问题关键点是在讲解一种思想数据结构它其实是一种算法的一个底层,它讲的是一种思想,就是告诉大家以后遇到一种类似有大量的重重复数据的问题,怎么去解决的思路.

(4)作业

关于稀疏数组的概念,

有以下两点要求:

①将构建的稀疏数组存盘 chessmap.data 。

在恢复原始二维数组,要求此文件 chessmap.data 读取。


相关文章
|
5月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
176 1
|
5月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
168 0
|
9月前
|
存储 算法 Java
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
308 10
 算法系列之数据结构-二叉树
|
9月前
|
算法 Java
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
265 3
 算法系列之数据结构-Huffman树
|
9月前
|
算法 Java
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
390 22
|
2月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
272 0
|
2月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
205 2
|
3月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
226 3
|
2月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
178 8
|
2月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
189 8

热门文章

最新文章