在許多應用中,表似乎是最自然的一種選擇,但有時出於對空間的考慮,就有可能放棄這種選擇。當只用表的一小部分時尤其如此,這種型別的表稱為稀疏表(sparse table),因為表中只是稀疏地放置了一些資料,它的大部分單元都是空的。此時可以用鍊錶代替表。
舉個例子,大學裡有幾千名學生和幾百門課,每名同學可能選修不同的課並有相應的成績,如何表示呢?最簡單的方法是建立乙個二維陣列,分別表示學號和課程號,值為成績,但這樣做的空間代價較大,有沒有更好的方法呢?這裡可以用稀疏表來表示。
具體實現時可以歸結為乙個稀疏矩陣如何在計算機中表示,這裡用十字鍊錶法,即維護乙個行陣列和列陣列,行陣列中的值為每個列鍊錶的頭指標,列陣列中的值為每個行鍊錶的頭指標,這樣資料大小就從m*n
被壓縮為m+n+每個具體節點大小
,在m
與n
非常大時,減少了非常大的空間消耗。而通過十字鍊錶的表示方法,查詢的時間複雜度雖有所增加,但相對於減少的巨大空間消耗仍非常有意義。
具體實現參考**splist.cpp, 通過這種方式,平衡了時間複雜性與空間複雜性,即通過增加少量的時間複雜性減少了巨大的空間複雜性。
資料結構 Sparse Table 稀疏表
st表是解決 rmq range minimum maximum query 靜態區間最值查詢問題的離線資料結構。其預處理時間複雜度為 o nlogn 查詢時間複雜度為 o 1 n為序列長度。rmq 問題也可以用線段樹來解決,只不過線段樹的查詢複雜度為 o nlogn 而且 量大。本文以求最小值為例...
資料結構 稀疏矩陣
稀疏矩陣 矩陣中有效資料的個數遠遠小於無效資料的個數,則可以稱之為稀疏矩陣 如果還像以前那樣將每個稀疏矩陣的資料都儲存起來,則會造成記憶體的很大程度的浪費,所以應用特別的儲存方式。稀疏矩陣的壓縮儲存 使用 三元組儲存每乙個有效資料,三元組按原矩陣中的位置,以行優先順序先後順序依次存放。矩陣的轉置 將...
資料結構 稀疏矩陣
簡單的說,設矩陣amn中有s個非零元素,若s遠遠小於矩陣元素的總數,則稱a為稀疏矩陣。s與m x n的比稱為矩陣的稀疏因子。當用陣列儲存稀疏矩陣中的元素時,僅有少部分的空間被利用,造成空間的浪費,為了節省儲存空間,可以採用一種壓縮的儲存方法來表示稀疏矩陣。由於非零元素的分布一般是沒有規律的,因此在儲...