今天我們來聊聊雜湊表。
雜湊表(hash table,也叫雜湊表):
雜湊表(hash table,也叫雜湊表),是依據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。(來自維基百科)
雜湊表的實現主要需要解決兩個問題:雜湊函式和雜湊衝突。
雜湊函式:
雜湊函式也叫雜湊函式,它對不同的輸出值得到乙個固定長度的訊息摘要。理想的雜湊函式對於不同的輸入應該產生不同的結構,同時雜湊結果應當具有同一性(輸出值盡量均勻)和雪崩效應(微小的輸入值變化使得輸出值發生巨大的變化)
衝突解決:
現實中的雜湊函式不是完美的,當兩個不同的輸入值對應乙個輸出值時,就會產生「碰撞」,這個時候便需要解決衝突。
常見的衝突解決方法有開放定址法,鏈位址發,建立公共溢位區等。實際的雜湊表實現中,使用最多的是【鏈位址法】。
鏈位址法:
鏈位址法的基本思想是,為每個 hash 值建立乙個單鏈表,當發生衝突時,將記錄插入到鍊錶中。
例 2 設有 8 個元素 ,採用某種雜湊函式得到的位址分別為: ,當雜湊表長度為 10 時,採用鏈位址法解決衝突的雜湊表如下圖所示:
(1)
資料結構之雜湊表(雜湊表)
今天學的是資料結構的雜湊查詢篇,其他的查詢可參見以前的傳送門 以前的查詢都是基於比較關鍵字的基礎上,所以查詢的效率依賴於查詢過程中所進行的比較次數。理想的情況是不經過任何比較,通過計算就能直接得到記錄所在的儲存位址,雜湊查詢 hashed search 是基於上述思想的一種查詢方式。雜湊法又稱為雜湊...
資料結構之雜湊表
雜湊表和雜湊化有乙個重要的概念是如何把關鍵字轉換成陣列下標,在雜湊表中這個轉換是通過雜湊函式來完成的。比如規定乙個單詞含有4個字元,對於單詞cats,我們採用 冪的連乘 的方式將乙個單詞對映成數字。因為有27個可能的字元,包括空格,所以冪採用27,則cats的數字下標是3 27 3 1 27 2 2...
資料結構之雜湊表
wikipedia上的解釋 下圖示意了雜湊表 hash table 這種資料結構。雜湊表 如上圖所示,首先分配乙個指標陣列,陣列的每個元素是乙個鍊錶的頭指標,每個鍊錶稱為乙個槽 slot 哪個資料應該放入哪個槽中由雜湊函式決定,在這個例子中我們簡單地選取雜湊函式h x x 11,這樣任意資料x都可以...