資料結構與演算法

在元素很多、負載因子維持在0.5左右的雜湊表中,使用線性探測的開放定址法往往比鏈結法(以鏈結串列串接的方法)快,最適當的原因為下列何者?

  1. A發生碰撞時下一個檢查的位置是相鄰的元素,多半位於同一條快取行或緊接的下一條,因此記憶體存取較少
  2. B開放定址法完全不會發生碰撞
  3. C鏈結法需要計算2次以上的雜湊函數
查看答案與解析

正確答案:A. 發生碰撞時下一個檢查的位置是相鄰的元素,多半位於同一條快取行或緊接的下一條,因此記憶體存取較少

在現今的 CPU 中,因快取未命中而讀取主記憶體的時間,比比較等計算長得多。線性探測在碰撞時檢查相鄰位置,因此多半在同一條快取行內就能完成,預取也能發揮效果。鏈結法中,串列的下一個元素常位於記憶體中遠處,每追蹤一次指標都容易發生快取未命中。即使時間複雜度的階相同,實際速度也會因記憶體存取方式而有很大差異。不過,線性探測在負載因子變高時,被占用的位置會聚集而急遽變慢,因此要把負載因子維持在較低的程度。

  • A. 正確。只檢查相鄰的位置,因此容易只用快取中的資料就完成。
  • B. 開放定址法也會發生碰撞,是靠檢查相鄰位置來處理。
  • C. 兩者都只計算1次雜湊函數,差異在於記憶體的存取方式。
練習這個領域 前往領域頁面

相關計算工具

資料結構與演算法的其他題目

  1. 在 GPU 這類平行處理裝置上排序時,有時會使用雙調排序(bitonic sort)這類比較與交換步驟固定的排序(排序網路),其理由為下列何者?
  2. 對於有 n 個元素的陣列,將所有不同的兩個元素組合各比較一次的處理(以雙重迴圈將第 i 個元素與其後的所有元素比較,並讓 i 逐一前進),其時間複雜度為下列何者?
  3. 某個時間複雜度為 O(n²) 的程式,在資料數為1,000時處理時間為0.5秒。若資料數變為4,000,處理時間約為幾秒?
  4. 以從開頭逐一比較的線性搜尋,在存有100個不同值的陣列中尋找目標值。若目標值一定在陣列中,且位於各位置的機率相等,則比較次數的平均為多少?
  5. 與陣列相比,鏈結串列(各元素持有指向下一個元素位置之指標的串列)的特徵,下列何者正確?