101 scala 稀疏陣列介紹

2021-10-07 16:24:02 字數 2367 閱讀 8052

當乙個陣列中的資料大部分都是預設資料,此時陣列資料需要存檔的情況下,大量預設資料也會占用儲存空間。稀疏陣列正是用於解決此類問題,稀疏陣列只存在資料在原始陣列中的位置及值,在存檔時只報存稀疏陣列中的資料即可;當讀取檔案時根據稀疏陣列來還原 原始陣列。

作用:減少儲存空間,起到類似資料壓縮的作用。

下面就來使用乙個簡單案例介紹一下稀疏陣列的使用

問題引出:

下面介紹乙個遊戲-五子棋,大家都知道棋盤是乙個縱橫交錯的線劃分而成的,其實轉變一下就變成了程式設計中的二維陣列,每個點都是陣列中的乙個座標,下就來代入一下

* 二維陣列模擬五子棋棋盤

*1:白子;2:黑子

* 棋盤效果模擬圖如下:

*000

0000

0000

*001

0000

0000

*000

2000

0000

*000

0000

0000

*000

0000

0000

*000

0000

0000

*000

0000

0000

*000

0000

0000

*000

0000

0000

*000

0000

0000

*000

0000

0000

//1.定義行列的長度

val rowsize =

11 val colsize =

11//2.定義二維陣列

val array = array.ofdim[int]

(rowsize, colsize)

array(1

)(2)

=1array(2

)(3)

=2

問題:如下棋盤是乙個二維陣列儲存資料,假設此時棋手需要暫存遊戲下次繼續玩,而此時棋盤上面棋子並不多,如果對整個陣列中資料進行存檔則預設無子也會占用空間。

解決:在棋子不多的情況下,使用稀疏陣列來記錄每個棋子的橫縱座標以及棋子型別即可,在實際存檔時只需要儲存這些已經落下的棋子即可

//記錄乙個棋子資料,行-列-值

class

node

(val row: int, val col: int, val value: int)

下面使用完整**演示:

object sparsearr }}

//5. 檔案io操作

val datas =

showsparsearr

(sparsearr)

//顯示稀疏陣列結果

//落地為磁碟檔案

val filename =

"d:/1.txt"

fileutil.

write

(filename)

(datas)

println

("------------檔案讀取----------"

)//檔案資料載入

val nodes = fileutil.

read

(filename)

nodes.

foreach

(println

(_))

println

("------------稀疏陣列還原棋盤----------"

)//6.根據檔案讀取資料,還原完整棋盤

val ar2 = array.ofdim[int]

(rowsize, colsize)

for(i <

-1 until nodes.length)

for(items <

- ar2)

println()

}}//棋盤顯示函式

def showqipan

(array: array[array[int]])

: unit =

println()

}}def showsparsearr

(arr: arraybuffer[node])=

strs.toarray

}}//記錄乙個棋子資料,行-列-值

class

node

(val row: int, val col: int, val value: int)

終結:當陣列中資料大量是預設資料時需要存檔,則可以使用稀疏資料完成資料壓縮作用

sgu 101 Domino 解題報告及測試資料

101.domino time limit per test 0.25 sec.memory limit per test 4096 kb 題解 求多公尺諾骨牌按照一定方式放置能否使相鄰的位置數字相同。其實就是求無向圖的尤拉通路,dfs即可。但需要注意以下幾點 1 注意是否是連通圖。2 注意自環。3...

c51隨機數不重複 scala生成隨機數注意

又是乙個採坑之旅。scala的運算元分為兩類,transformer運算元和action運算元。由於scala是惰性的,在transformer運算元執行時,只是記錄這個操作,而並沒有真正的執行,只有遇到action運算元,才會將之前的所有操作真正執行。因此,當在transformer之後,多次進行...

例題10 1 巨大的斐波拉契數 Uva 11582

題意 讓你求斐波拉契數列的第a的b次方項模n的結果。分析 由於是每一項都對n取模,所以不同的n值都會對應乙個週期,只要迴圈一下。當前項等於f1,前一項等於f0時就可以跳出迴圈了。a的b次方,可以用冪取模的知識,快速分治求出。注意第二個樣例a要先模一下週期,不然會有溢位。剛開是long long 也會...