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

2021-10-01 10:20:28 字數 1818 閱讀 6859

五子棋程式,只有兩種顏色的子,連成五個就gameover。可能乙個棋盤能放下100枚棋子,但是總占用空間只有不到10個,遊戲就over了。那麼這樣儲存到本地file的話,空間是極大的浪費的。這就引出了稀疏陣列。

當乙個陣列中大部分元素都是0(或是同乙個值)的時候,就可以用稀疏陣列來儲存此陣列。

先有個原始陣列,8*7的規模,如下

明顯發現0值的數量遠大於有效資料(這裡非0值代表有效資料)。而且是個陣列形式,所以稀疏陣列來了!拆解成下稀疏陣列有如下幾點:

比如上面的**換成稀疏陣列的存法就如下:

可以發現:

稀疏陣列永遠都是三列。

原始陣列存法的話需要87=56個元素空間

稀疏陣列存法的話需要113=33個元素空間,效果很明顯

用**證明上述,**中有詳細的關鍵性注釋,一看就懂。

package com.chentongwei.struct.sparsearray;

/** * description: 稀疏陣列

* * @author tongwei.chen 2019-12-12 14:39:08

*/public

class

mysparsearray3

// print

private

static

void

print

(int

array)

system.out.

println()

;}}// 原始陣列->稀疏陣列

private

static

int[

]origintosparse

(int

originarray)}}

// 為什麼是count + 1?因為count代表有效資料行數,但是再頂部還有乙個總的行數、列數、值數

int[

] sprasearray =

newint

[count +1]

[3];

// 為稀疏陣列的第一行賦值

sprasearray[0]

[0]= originarray.length;

sprasearray[0]

[1]= originarray[0]

.length;

sprasearray[0]

[2]= count;

// 組裝稀疏陣列

int index =0;

for(

int i =

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

}return sprasearray;

}// 稀疏陣列->原始陣列

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

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

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

編寫的五子棋程式中,有存檔退出和續上盤的功能。問題分析 因為該二維陣列的很多值是預設值 0,因此記錄了很多沒有意義的資料 稀疏陣列 當乙個陣列中大部分元素為 或者為同乙個值的陣列時,可以使用稀疏陣列來儲存該陣列。稀疏陣列的處理方法 稀疏陣列舉例說明 整體思路分析 將二維陣列 轉 稀疏陣列 1.先遍歷...

資料結構 陣列和稀疏陣列

陣列是一種資料結構,其可以在記憶體中連續儲存多個資料元素,在記憶體中的分配也是連續的。如上圖,是乙個長度為6的int型陣列。陣列在建立的時候會在記憶體中開闢一段連續的記憶體,陣列中的元素都是同一型別的 也就意味著陣列中每一元素所占用的記憶體是一樣的 陣列長度確定後不能再修改,陣列是引用型別,可存在多...