題組內容
二、有一筆資料的鍵值依序為 32,17,85,16,51,60。使用除法雜湊函數
h( k ) k mod 7 來建立 7 個桶(buckets)且每個桶只有一個槽(slot)的
雜湊表(hash table)。當發生碰撞(collision)與溢位問題時,
(一)如果使用開放定址(open addressing)中的線性探測法(linear probing) , 請寫出產生的雜湊表格。而此方法的主要缺點為何?
詳解 (共 1 筆)
詳解
建立雜湊表格:
使用除法雜湊函數 ℎ(?)=?mod 7h(k)=kmod7 並應用線性探測法來處理碰撞問題,將鍵值依序插入雜湊表:
- 鍵值:32, 17, 85, 16, 51, 60
- 雜湊函數:ℎ(?)=?mod 7h(k)=kmod7
- 桶數:7(編號0到6)
插入過程:
-
32:
- ℎ(32)=32mod 7=4h(32)=32mod7=4
- 插入位置4:_,_,_,_,32,_,__,_,_,_,32,_,_
-
17:
- ℎ(17)=17mod 7=3h(17)=17mod7=3
- 插入位置3:_,_,_,17,32,_,__,_,_,17,32,_,_
-
85:
- ℎ(85)=85mod 7=1h(85)=85mod7=1
- 插入位置1:_,85,_,17,32,_,__,85,_,17,32,_,_
-
16:
- ℎ(16)=16mod 7=2h(16)=16mod7=2
- 插入位置2:_,85,16,17,32,_,__,85,16,17,32,_,_
-
51:
- ℎ(51)=51mod 7=2h(51)=51mod7=2
- 位置2已被佔用,使用線性探測法:
- 檢查位置3(已佔用)
- 檢查位置4(已佔用)
- 檢查位置5(空)
- 插入位置5:_,85,16,17,32,51,__,85,16,17,32,51,_
-
60:
- ℎ(60)=60mod 7=4h(60)=60mod7=4
- 位置4已被佔用,使用線性探測法:
- 檢查位置5(已佔用)
- 檢查位置6(空)
- 插入位置6:_,85,16,17,32,51,60_,85,16,17,32,51,60
最終雜湊表格:
_,85,16,17,32,51,60_,85,16,17,32,51,60
線性探測法的主要缺點:
- 初始碰撞後的聚集:當多個鍵值發生碰撞並分配到相鄰的槽中時,會導致聚集效應(clustering),使得新的插入和查找操作的效率下降。
- 槽利用率低:當雜湊表接近滿時,線性探測法的效能會顯著降低,因為需要檢查的槽數量增多,影響插入和查找的效率。