golang實現稀疏陣列
# 稀疏陣列
### 什麼是稀疏陣列
稀疏陣列可以看做是普通陣列的壓縮,但是這裡說的普通陣列是值無效資料量遠大於有效資料量的陣列
```
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 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
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
```
### 其稀疏陣列形式
```
11 11 2
1 2 1
2 4 2
```
### 儲存
1,剛說到稀疏陣列是一種壓縮後的陣列,為什麼要進行壓縮儲存呢?
2,原陣列中存在大量的無效資料,佔據了大量的儲存空間,真正有用的資料卻少之又少
3,壓縮儲存可以節省儲存空間以避免資源的不必要的浪費,在資料序列化到磁碟時,壓縮儲存可以提高IO效率
### 儲存方式
1,普通儲存
![普通儲存](https://img-blog.csdnimg.cn/20190703122416582.png)
2,鏈式儲存
![鏈式儲存](https://img-blog.csdnimg.cn/20190703122823779.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTkyMjI4OQ==,size_16,color_FFFFFF,t_70)
3,十字鏈式儲存
![十字鏈式儲存](https://img-blog.csdnimg.cn/20190703123032956.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTkyMjI4OQ==,size_16,color_FFFFFF,t_70)
### 程式碼實現
```
package main
import "fmt"
type Node struct {
row int
col int
val int
}
func main() {
//1,建立一個原始陣列
var chessMap [11][11]int
chessMap[1][2] = 1
chessMap[2][3] = 2
//存檔退出
var sparseArr []Node
for index, item := range chessMap {
for number, value := range item {
if value != 0 {
node := Node{
row: index,
col: number,
val: value,
}
sparseArr = append(sparseArr, node)
}
}
}
//續上盤
var chessMap2 [11][11]int
for _, value := range sparseArr {
chessMap2[value.row][value.col] = value.val
}
//恢復後的資料
for _, item := range chessMap2 {
for _, val := range item {
fmt.Printf("%d\t", val)
}
fmt.Println()
}
}
```
### 結果
```
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 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 0 0 0
0 0 0 0 0 0 0 0 0 0 0
```
[github](https://github.com/dezhizhang/data/tree/main/1%E7%A8%80%E7%96%8F%E6%95%B0%E7%BB%84)
[相關網站](http://www.xiaozhi.shop/)
[個人部落格](http://blog.xiaozhi.shop/detail?article_id=5f79cab16961d77ccd965428)
相關文章
- 稀疏陣列陣列
- 稀疏陣列、佇列陣列佇列
- Java實現普通二維陣列和稀疏陣列的相互轉換Java陣列
- 稀疏陣列、佇列的概念與實踐陣列佇列
- 20_稀疏陣列陣列
- 二維陣列和稀疏陣列互轉陣列
- 教你如何運用golang實現陣列分割Golang陣列
- java稀疏陣列是什麼Java陣列
- 稀疏陣列真心話大冒險陣列
- Java陣列宣告建立和使用以及多維陣列、Arrays類、稀疏陣列Java陣列
- golang陣列分割Golang陣列
- 教你如何運用golang 實現陣列的隨機排序Golang陣列隨機排序
- 電子表格實戰錦囊:巧用稀疏陣列是關鍵!陣列
- (一)Java資料結構之稀疏陣列Java資料結構陣列
- 【小白學演算法】2. 稀疏陣列演算法陣列
- golang 陣列去重 移除陣列指定元素Golang陣列
- 稀疏矩陣矩陣
- 【資料結構與演算法】——稀疏陣列資料結構演算法陣列
- 資料結構與演算法—稀疏陣列和佇列資料結構演算法陣列佇列
- (二)golang陣列和切片Golang陣列
- golang 陣列面試題Golang陣列面試題
- Golang陣列注意細節Golang陣列
- golang-陣列基本使用Golang陣列
- golang基礎之陣列Golang陣列
- 陣列排序的實現陣列排序
- 資料結構與演算法之稀疏陣列資料結構演算法陣列
- 資料結構與演算法:稀疏陣列(一)資料結構演算法陣列
- Golang 實現 RabbitMQ 的死信佇列GolangMQ佇列
- golang 之slice 變長陣列Golang陣列
- 基於 golang 實現的泛型陣列,支援動態擴容等特性Golang泛型陣列
- JS實現陣列去重JS陣列
- 如何實現陣列去重?陣列
- PHP 陣列底層實現PHP陣列
- JavaScript 中實現等分陣列JavaScript陣列
- 靜態佇列,迴圈陣列實現佇列陣列
- Golang 實現 RabbitMQ 的延遲佇列GolangMQ佇列
- golang切片和陣列的區別Golang陣列
- 正則實現陣列濾重陣列