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

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

开发者学堂课程【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 读取。


相关文章
|
6天前
|
算法
数据结构中的KMP算法及其改进算法
KMP算法通过引入部分匹配表,有效避免了重复计算,从而将字符串匹配的时间复杂度降低到O(m+n)。通过进一步优化next数组,KMP算法的效率得到了进一步提升。对于大规模字符串匹配问题,KMP算法及其改进算法提供了高效的解决方案,是计算机科学领域的经典算法之一。
13 3
|
23小时前
|
存储 算法 搜索推荐
数据结构中的常用算法
数据结构中的常用算法
|
1天前
|
存储 算法 Go
算法学习:数组 vs 链表
算法学习:数组 vs 链表
6 0
|
1天前
|
搜索推荐 算法
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
|
1天前
|
存储 算法
【二叉树】数据结构——BST二叉树基本概念及算法设计(插入、删除、遍历操作)
【二叉树】数据结构——BST二叉树基本概念及算法设计(插入、删除、遍历操作)
|
3天前
|
算法 索引 Python
数据结构 数组部分小结
数据结构 数组部分小结
|
5天前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
5天前
|
算法
【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值
【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值
|
4天前
数据结构——栈和队列
数据结构——栈和队列
7 1
|
7天前
|
存储 算法 调度
数据结构与算法-栈篇
数据结构与算法-栈篇
12 3

热门文章

最新文章