【數據結構】塊狀鏈表(塊狀數組)

塊狀鏈表(塊狀數組)

數組與鏈表

在討論塊狀鏈表(或者稱塊狀數組)之前,我們先回顧一下數組和鏈表的特點:

操作 數組 (通常考慮有序) 鏈表
存儲結構 地址連續的存儲單元,物理位置相鄰 地址不連續,物理位置不相鄰
定位 O (1) O (N)
插入 O (N) O (1)
刪除 O (N) O (1)

數組定位的效率很高,直接通過下標索引就能獲取元素的定位,由於長度通常是固定的,因此不適合插入和刪除等操作。當數組爲有序時,使用二分查找法效率較高,時間複雜度爲 O (logN)。

鏈表的插入和刪除效率較高,但定位效率較低,最差情況需要遍歷整個鏈表才能定位到目標節點元素。

塊狀數組

假設一個數據可以用一個大數組進行存儲,當我們按照某個間距把這個大數組劃分成若干個小數組,這個的結構我們稱之爲塊狀數組。

當每一個小數組作爲節點存儲到一個鏈表中時,這樣的結構就能成爲塊狀鏈表。實際上,兩者的宏觀邏輯是一致的。

塊狀鏈表

塊狀鏈表結合了數組和鏈表的優點,使得所有操作的時間複雜度都爲 O (N\sqrt{N})。

從結構設計上看,塊狀鏈表實際上是個鏈表,但鏈表中每個節點又是一個數組。在處理實際問題時,我們可以先確定操作對象位於哪個區間,即位於哪個小數組中,而不用通過遍歷每一個元素來定位目標對象,從而提升效率。

img

定位

從鏈表頭節點開始遍歷,根據某些條件(如邊界值、特徵值等)定位某一個節點(塊、數組),再遍歷節點內數組,確定偏移量。

隨後即可進行查詢、插入、刪除等操作。

複雜度分析

假設數據總數爲 N,數組的長度固定爲 n,那麼在理想狀況下劃分的塊數目爲 N/n,那麼

  • 定位的時間複雜度爲 O (N/n);
  • 插入、刪除的時間複雜度爲 O (n)。

令 N/n = n,則 n = N\sqrt{N},即每次操作的時間複雜度約爲 O (N\sqrt{N})。

與平衡樹相比較:時間複雜度較大,空間複雜度較小。

平衡樹 塊狀鏈表
時間複雜度 O (logN) O (N\sqrt{N})
空間複雜度 O (N) O (N\sqrt{N})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章