談一下稀疏陣列

2022-06-05 12:06:09 字數 1584 閱讀 1582

對於乙個初窺資料結構的人來說,稀疏陣列確實可以很好的幫助你鍛鍊思維。

但自從第三次科技革命後,人們都一直在做著用空間去換取時間的損事,而以時間換空間的稀疏陣列,倒也跟北大考古專業有些心心相惜。

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

(小規模陣列便是稀疏陣列)

像在編寫的五子棋程式中,有存檔退出和續上局功能

在存檔的時候,將黑白子以及空位都分別以1,2,0存放在乙個二維陣列中,當棋盤上空位比較多的時候,大量的0(重複資料)會占用較高的空間,為了節省空間,便有了稀疏陣列。

如上圖,將乙個棋盤對映成為乙個二維陣列,在陣列中,有大量重複的資料.

這時,我們可以將棋盤的行、列以及非0的資料抽取出來,分別作為稀疏陣列的 sparsearray[0][0]、sparsearray[0][1]、sparsearray[0][2]。

將非重複資料的行、列、值依次儲存在稀疏陣列中,便有了乙個較小規模的陣列,以節省空間。

package

com.perwrj.sparsearray;

public

class

sparsearray

system.out.println("\n");

}/** 將原始陣列轉換為稀疏陣列

*///

獲取原始陣列中不為零值的個數

int sum = 0;

for (int i = 0; i < chessarr.length; i++) }}

//給稀疏陣列第一行賦值,分別為原始陣列的行,列,不為零值個數

int sparsearr = new

int [sum + 1][3];

sparsearr[0][0] = 11;

sparsearr[0][1] = 11;

sparsearr[0][2] =sum;

//遍歷原始陣列,為稀疏陣列其他賦值(原始陣列中非零的數)

int count = 0;

for (int i = 0; i < chessarr.length; i++) }}

//列印遍歷稀疏陣列

system.out.println("稀疏陣列");

for (int

is : sparsearr)

system.out.println("\n");

}/** 稀疏陣列轉換為原始陣列

*///

用稀疏陣列第一行建立原始陣列

int chessarr2 = new

int[sparsearr[0][0]][sparsearr[0][1]];

//遍歷賦值原始陣列

for (int i = 1; i < sparsearr.length; i++)

//遍歷還原後的陣列

system.out.println("還原後的二維陣列");

for (int

is : chessarr2)

system.out.println("\n");}}

}

談一下多執行緒下的count

在單執行緒下,我們經常使用count 將count的值自增1,也不會發生什麼錯誤,但是在多執行緒下,可能使用count 結果可能就往往出乎我們的意料了.我們以count 一直從1加到5為例 public class threadcount extends thread override public...

簡談一下時間輪(Time Wheel)

如果乙個程式設計師不知道 time wheel,那麼那個程式設計師一定不是個合格的程式設計師。timer對於作業系統還是乙個虛擬機器語言或大型中介軟體都起著重要的作用,同時timer演算法的選擇也直接影響著效能。time wheel翻譯為時間輪,是用於實現定時器timer的經典演算法,演算法細節就不...

從頭到尾談一下HTTPS

你能談一下https嗎?一種比http安全的協議。如果面試這樣說的話那差不多就gg了,其實https要展開回答的話內容還挺豐富的。本篇文章詳細介紹了https是什麼 為什麼安全以及實現安全的方法,一起來學習吧。本文略長,請保持耐心。https是以安全為目標的http通道,簡單講是http的安全版。之...