雜湊表 雜湊表

2021-08-16 00:23:40 字數 2268 閱讀 2087

hash table:

1、雜湊表是一種用於以常數平均時間進行插入和查詢的資料結構,不支援排序以及需要依靠排序來實現的操作

2、雜湊表的主要思想是通過雜湊函式將關鍵字對映到陣列的某個下標位置,進而來實現常數時間的查詢

3、由於雜湊函式可能將不同的關鍵字對映到同乙個位置,這種情況被稱為衝突

4、雜湊表主要面臨兩個問題:雜湊函式的選擇和衝突的解決

5、為了雜湊均勻,儲存元素的陣列的長度為質數

質數就是除了1和它本身之外,再也沒有整數能被它整除的數.比如:2..3.5.7.11.13.17.19.23.39.31…………………………

素數就是質數.質數只外的數稱為合數.合數比如:4.6.8.16.32.64.72……………………………………

但是注意,1既不是素數也不是合數.

6、雜湊函式

針對整數、表長有限、字元轉換、質數

7、衝突解決

1)分離鏈結法/開鏈法(stl中hash table的實現方法)

將雜湊到同乙個位置的所有元素保留到乙個表中

2)開放定址法

開放定址法是一種不需要鍊錶來解決雜湊衝突的方法,其基本思想是:如果有衝突發生,就嘗試選擇另外的存放單元,直到找出空的單元為止。

開放定址法又包括三種方法:線性探測法、平方探測法、雙雜湊

4、線性探測法

當衝突時,一一往下找,直到找到空位,如果到達尾端,則從頭開始繼續找

5、平方探測法/二次探測法

如果假設**大小為質數(prime),而且永遠保持負載係數在0.5以下(超過0.5就重新配置**),則可以保證每插入乙個新元素所需要的探測次數不多於2

6、雙雜湊

其中,r為小於table size的素數

比如下圖中,令r=7

3)再雜湊

基本思想:對於使用平方探測的開放定址法,如果表的元素填得太滿,那麼操作的執行時間將開始消耗過長,且insert操作可能會失敗。這可能發生在有太多的移動和插入混合的場合。此時,一種解決方法是建立另外乙個大約兩倍大的表(而且使用乙個新的雜湊函式),掃瞄整個原始雜湊表,計算每個元素的新雜湊值,並將其插入到新雜湊表中的相應位置

4)可擴雜湊

這種雜湊方法主要是針對資料量太大,以至於裝不進主存的情況,此時主要考慮的是檢索資料所需的磁碟訪問次數

eg. 假設資料由6個位元整數組成,如圖所示,第一行為存入記憶體中的內容,每次在下面對應豎框中查詢為一次磁碟操作。

8、hash table構成的四個新資料結構:

hash_set、hash_multiset、hash_map、hash_multimap

1)stl中,set、map、multiset、multimap以rb tree為底層實現,hash_set、hash_multiset、hash_map、hash_multimap以hash_table為底層實現

2)由於hash_set的操作介面,hash都提供了,所以幾乎所有的hash_set操作行為都只是轉呼叫hash_table的函式操作,hash_map同理

3)由於rb tree有自動排序功能而hash table沒有,因此set、map、multiset、multimap的元素有自動排序功能,而hash_set、hash_multiset、hash_map、hash_multimap沒有

4)map有鍵值和實值,而set只有乙個值

5)由於stl中的hash table只能處理char*、char、short、int、long及其相應型別,因此hash_set、hash_multiset、hash_map、hash_multimap也只能處理這些型別,諸如string這些其他型別不能處理,會報錯

雜湊表 雜湊表

一 定義 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。雜湊表的做法其實很簡單,就是把key通過乙個固定的演算法函式...

雜湊表(雜湊表)

雜湊表是最基礎的資料結構之一,利用鍵值對儲存並檢索資料的一種非線性結構。在其它各種結構線性表 樹等資料結構中,記錄在結構中的位置是隨機的,和記錄關鍵字之間不存在確定的關係,因此,在結構中查詢記錄時需進行一系列和關鍵字的 比較 的基礎上。在順序查詢時,比較的結果為 與 兩種可能 在折半查詢 二叉排序樹...

雜湊表(雜湊表)

原文 雜湊表是種資料結構,它可以提供快速的插入操作和查詢操作。第一次接觸雜湊表時,它的優點多得讓人難以置信。不論雜湊表中有多少資料,插入和刪除 有時包括側除 只需要接近常量的時間即0 1 的時間級。實際上,這只需要幾條機器指令。對雜湊表的使用者一一人來說,這是一瞬間的事。雜湊表運算得非常快,在電腦程...