資料結構與演算法 稀疏陣列

2021-10-06 09:48:44 字數 2641 閱讀 6868

首先先介紹一下線性結構與非線性結構

線性結構是比較常用的資料結構,特點就是資料元素是一對一的關係。

線性結構有兩種不同的儲存結構,即順序儲存結構(陣列)和鏈式儲存結構(鍊錶)。順序儲存的線性表稱為順序表,順序表中儲存的元素是連續的。

鏈式儲存的線性表稱為鍊錶,鍊錶中儲存的元素不一定是連續的,元素節點中存放資料以及相鄰元素的位址資訊。

線性結構常見的有:陣列,佇列,鍊錶和棧。

非線性結構常見的有:二維陣列,多維陣列,廣義表,樹結構圖結構

言歸正傳,下面正式介紹稀疏陣列

當乙個陣列中大部分元素是0,或者為同乙個值的陣列時,可以用稀疏陣列來儲存該陣列。

簡言之就是將乙個大部分都是同乙個值的二維陣列進行壓縮。

首先遍歷二維陣列,找到多少行,多少列,多少個不同的值,這裡計作sum

宣告乙個二維陣列,比如int型別的int[sum+1][3]的陣列

第一行分別存放,原陣列的行數,列數,不同數

第二行以後面分別存放,原陣列不同值所在的位置,行數,列數,本身值

先讀取到稀疏陣列的第一行,根據第一行,建立二維陣列。

從第二行開始遍歷稀疏陣列,獲取到位置與值,然後賦值給剛才建立的二維陣列。

二維陣列的樣子

0 0 0 2 0 5 0

0 1 0 0 0 0 0

0 0 0 0 0 0 0

0 4 0 0 0 0 0

0 0 0 0 0 1 0

0 0 0 0 0 0 0

轉為稀疏陣列的樣子

6 7 8

0 3 2

0 5 5

1 1 1

3 1 4

4 5 1

資料量從 6×7

=42

6 \times 7 = 42

6×7=42

變為了 3×6

=18

3 \times 6 = 18

3×6=18

,資料量縮小了

//二維轉稀缺

int[

] arr =,,

,};int sum =0;

for(

int[

] ints : arr)}}

int[

] sparsematrix =

newint

[sum+1]

[3];

sparsematrix[0]

[0]= arr.length;

sparsematrix[0]

[1]= arr[0]

.length;

sparsematrix[0]

[2]= sum;

int sparsematrixindex =1;

for(

int i =

0; i < arr.length; i++)}

}for

(int

matrix : sparsematrix)

objectoutputstream objectoutputstream =

newobjectoutputstream

(new

fileoutputstream

("d:"))

;objectoutputstream.

writeobject

(sparsematrix)

;objectoutputstream.

flush()

;objectoutputstream.

close()

;system.out.

println

("-----------------------------------");

objectinputstream objectinputstream =

newobjectinputstream

(new

fileinputstream

("d:"))

;int

mapdata =

(int

) objectinputstream.

readobject()

;objectinputstream.

close()

;//稀缺轉二維

int[

] arr2 =

newint

[mapdata[0]

[0]]

[mapdata[0]

[1]]

;for

(int i =

1; i < mapdata.length; i++

)for

(int

ints : arr2)

上面的例子,展示了將二維陣列轉化為稀疏陣列並序列化到磁碟中,然後從磁碟中讀取資料,恢復資料的整個流程。

初學資料結構與演算法 稀疏陣列

如下 示例 public static void main string args system.out.println 呼叫tosparsearr方法,把二維陣列轉化為稀疏陣列 int sparsearr tosparsearr chessarr1 呼叫writermapdate方法,把稀疏陣列儲...

資料結構和演算法 稀疏陣列

此部分是將上面的思路分析轉換成 實現 public class sparsearray system.out.println 將二維陣列轉換為稀疏陣列 1.先遍歷二維陣列,得到非0資料的個數 int sum 0 for int i 0 i 10 i 2.建立對應的稀疏陣列 int sparsearr...

稀疏陣列 資料結構 壓縮演算法

概述 當乙個陣列中大部份元素為0,或者為同一值的陣列時,可以使用稀疏陣列來儲存該陣列。處理方式 記錄陣列一共有幾行幾列,有多少不同值 把具有不同值的元素和行列及值記錄在乙個小規模的陣列中,從而縮小程式規模 建立乙個稀疏陣列儲存方式 public class helloworld system.out...