雜湊表的特點
什麼是完全雜湊
雜湊方式
直接定址表的特點
雜湊表的特點,可以解決什麼問題
什麼是衝突
如何避免衝突
鏈結法的特點,插入,刪除,查詢的時間複雜度是多少
開放定址方法的原理
什麼是裝載因子
雜湊函式有什麼
同義詞的概念
聚集(堆積)現象
單向雜湊表的特徵
如何提高雜湊表的查詢效率
通過一級雜湊函式h1和二級雜湊函式h2後對映到二級雜湊中,其中,關鍵字個數等於桶數(n=m),二級雜湊的大小n(t[i])為關鍵字個數的平方,用以保證完全o(n)的儲存空間,以及o(1)的訪問效率。但實際上,不可能真正地完全實現無衝突。
直接定址和雜湊表
缺點:如果全域u很大,則在一台標準的計算機可用記憶體容量中要儲存大小為|u|的一張表t不太實際,甚至不可能
兩個關鍵字對映到同乙個槽中
在每個位桶實現的時候,我們採用鍊錶(jdk1.8之後採用鍊錶+紅黑樹)的資料結構來去訪問發生雜湊衝突的輸入域的關鍵字
插入操作:在發生雜湊衝突的時候,我們輸入域的關鍵字去對映到位桶(實際上是實現位桶的這個資料結構,鍊錶或者紅黑樹)中去的時候,我們先檢查帶插入元素x是否出現在表中,很明顯,這個查詢所用的次數不會超過裝載因子(n/m:n為輸入域的關鍵字個數,m為位桶的數目),它是個常數,所以插入操作的最壞時間複雜度為o(1)的。
查詢操作:在發生雜湊衝突的時候,我們去檢索的時間複雜度不會超過裝載因子,也就是檢索資料的時間複雜度也是o(1)的。
刪除操作:如果在拉鍊法中我們想要使用鍊錶這種資料結構來實現位桶,那麼這個鍊錶一定是雙向鍊錶,因為在刪除乙個元素x的時候,需要更改x的前驅元素的next指標的屬性,把x從鍊錶中刪除。這個操作的時間複雜度也是o(1)的。
優點:
缺點:
開放位址法有個非常關鍵的特徵,就是所有輸入的元素全部存放在雜湊表裡,也就是說,位桶的實現是不需要任何的鍊錶來實現的,換句話說,也就是這個雜湊表的裝載因子不會超過1。它的實現是在插入乙個元素的時候,先通過雜湊函式進行判斷,若是發生雜湊衝突,就以當前位址為基準,根據再定址的方法(探查序列),去尋找下乙個位址,若發生衝突再去尋找,直至找到乙個為空的位址為止。所以這種方法又稱為再雜湊法。
探查序列方法:
裝填因子a = n/m,n為關鍵字數,m為表長
除法雜湊法:h(k)=k mod a
乘法雜湊法:
全域雜湊法:
雜湊函式可能會把兩個或兩個以上的不同關鍵字對映到同一位址,稱這種情況為「衝突」,這些發生碰撞的不同關鍵字稱為同義詞。
衝出的解決方式不是太妥當造成的,比如線性探查解決衝突,使得不僅雜湊到同乙個桶的發生衝突,並且和不是雜湊到同乙個位置的其他關鍵字也發生衝突,此時發生衝突的概率大大增加,一堆對的關鍵字非常容易堆積在一起
單向雜湊表就是key可以找到value,反過來不可以
hash表的查詢效率取決於雜湊函式、處理衝突的方法和裝填因子。衝突發生的概率與裝填因子(表中記錄數與表長之比)的大小成正比,即裝填得越滿越容易發生衝突
學習筆記 資料結構(四)雜湊表
雙鏈表的查詢只能從頭往尾找,或者從尾往頭找,效率低下,所以就有了雜湊表。雜湊表是將雙鏈表通過乙個hash函式分類,分成若干類,形成乙個索引,然後查詢的時候就可以快速的定位到某一類,減少查詢的時間。下面是用雜湊表的底層使用核心鍊錶實現的。h檔案 pragma once include list.h s...
學習筆記 資料結構
一 常用的資料結構 1 線性資料結構 元素之間一般存在元素之間存在一對一關係,是最常用的一類資料結構,典型的有 陣列 棧 佇列和線性表 2 樹形結構 結點間具有層次關係,每一層的乙個結點能且只能和上一層的乙個結點相關,但同時可以和下一層的多個結點相關,稱為 一對多 關係,常見型別有 樹 堆 3 圖形...
學習筆記 資料結構 堆結構
堆結構 實質是陣列 特點 以陣列的形式去儲存完全二叉樹 原理 以前序遍歷完全二叉樹,得出結點的前序序列,以陣列的形式儲存該序列。查詢父,子結點通過陣列下標id間的轉換關係實現。優點 節省儲存空間,查詢效率高 缺點 1 只能表示完全二叉樹 更廣泛的可以說是完全n叉樹 2 對樹的插入,刪除操作執行效率低...