稀疏表

稀疏表

在許多應用中,表似乎是最自然的一種選擇,但有時出於對空間的考慮,就有可能放棄這種選擇。當只用表的一小部分時尤其如此,這種類型的表稱爲稀疏表(sparse table),因爲表中只是稀疏地放置了一些數據,它的大部分單元都是空的。此時可以用鏈表代替表。

舉個例子,大學裏有幾千名學生和幾百門課,每名同學可能選修不同的課並有相應的成績,如何表示呢?最簡單的方法是建立一個二維數組,分別表示學號和課程號,值爲成績,但這樣做的空間代價較大,有沒有更好的方法呢?這裏可以用稀疏表來表示。

實現思路

具體實現時可以歸結爲一個稀疏矩陣如何在計算機中表示,這裏用十字鏈表法,即維護一個行數組和列數組,行數組中的值爲每個列鏈表的頭指針,列數組中的值爲每個行鏈表的頭指針,這樣數據大小就從M*N被壓縮爲M+N+每個具體節點大小,在MN非常大時,減少了非常大的空間消耗。而通過十字鏈表的表示方法,查找的時間複雜度雖有所增加,但相對於減少的巨大空間消耗仍非常有意義。

具體實現參考代碼splist.cpp, 通過這種方式,平衡了時間複雜性與空間複雜性,即通過增加少量的時間複雜性減少了巨大的空間複雜性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章