golang實現稀疏陣列

qq_34820371發表於2020-10-04

# 稀疏陣列

### 什麼是稀疏陣列

稀疏陣列可以看做是普通陣列的壓縮,但是這裡說的普通陣列是值無效資料量遠大於有效資料量的陣列

```

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)











 








 

相關文章