資料結構與演算法

關於雜湊表中碰撞(collision)的說明,下列何者正確?

  1. A能從雜湊值求出原本的鍵
  2. B不同的鍵求出相同的雜湊值(存放位置)
  3. C相同的鍵每次執行都求出不同的雜湊值
查看答案與解析

正確答案:B. 不同的鍵求出相同的雜湊值(存放位置)

雜湊表以雜湊函數從鍵計算存放位置,平均能以 O(1) 進行搜尋、插入與刪除。鍵的種類遠多於表的大小,因此不同的鍵落在相同位置(碰撞)無法避免。所以要用把相同位置的元素串成串列的鏈結法,或尋找其他空位置的開放定址法等來處理碰撞。相同的鍵若不一定求出相同的雜湊值就無法搜尋;能否從雜湊值得知原本的鍵,則是用於密碼學時的性質,與碰撞無關。

  • A. 無法求出原本的值(單向性)是密碼學雜湊函數的性質,與碰撞無關。
  • B. 正確。不同的鍵落在相同位置稱為碰撞,一定要以某種方法處理。
  • C. 相同的鍵若產生不同的值就找不到資料,因此雜湊函數會設計成不會如此。
練習這個領域 前往領域頁面

相關計算工具

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

  1. 在大小為7(位置0~6)的雜湊表中,以雜湊函數 h(k) = k mod 7 依序存放鍵10、17、24、3。發生碰撞時,使用把位置逐一往後移(6的下一個是0)來尋找空位置的線性探測法。鍵3會存放在哪個位置?
  2. 比較處理雜湊表碰撞的鏈結法(以鏈結串列串接相同位置的元素)與開放定址法(在表中尋找其他空位置),下列說明何者正確?負載因子為存放的元素數除以表的大小所得的值。
  3. 與陣列中央的元素比較、每次將搜尋範圍縮小一半的二分搜尋,其使用的前提條件為下列何者?
  4. 以二分搜尋在依升冪排序的1,000個不同值中尋找某個值。若1次比較就能得知「相等、較小、較大」,包含找得到與找不到的情況,比較次數最多為幾次?
  5. 以二分搜尋在依升冪排列的陣列 a[0]~a[9] = 3, 8, 12, 17, 23, 31, 38, 45, 52, 60 中尋找38。搜尋範圍從下端 lo = 0、上端 hi = 9 開始,中央位置為 (lo + hi) ÷ 2 無條件捨去。依序排列與38比較的元素值,下列何者正確?