1、雜湊的概念
元素的儲存位置與它的關鍵碼一一對映,在查詢元素的時候不用進行比較,可以直接在表中檢索出元素的值,所以查詢的時間複雜度是o(1)
2、雜湊衝突
不同關鍵字通過相同雜湊數計算出相同的雜湊位址
3、產生雜湊衝突的原因
設計的雜湊函式不夠合理
(常用的雜湊函式:直接的定製法,除留餘數法)
4、解決雜湊衝突的方法
(1)閉雜湊(開放定址法)
發生雜湊衝突時,如果雜湊表未被裝滿,說明雜湊表中患有空位置,那麼將出現衝突的元素存放在下乙個空位置中
查詢空位置的方法:線性探測,二次探測
線性探測:從衝突的位置開始,依次向後找,直到找到空位置停下來,插入新元素。(在雜湊表中不能隨便刪除元素,會影響其他元素《解決辦法:使用標記的偽刪除》)
二次探測:通過雜湊函式查詢需要插入元素的位置,當裝填因子小於0.5時不會出現同一位置探查兩次的現象
(2)開雜湊
利用雜湊函式計算出每個關鍵碼的位址,相同位址的關鍵碼存在有個桶中,每個桶中的元素利用單鏈表連線起來,各個單鏈表的頭結點存放在雜湊表中。
5、開雜湊與閉雜湊的比較
開雜湊處理溢位,需要增設鏈結指標,似乎增加了儲存開銷。事實上: 由於閉雜湊必須保持大量的空閒空間以確保查詢效率,如二次探查法要求裝載因子a <= 0.7,而表項所佔空間又比指標大的多,所以使用開雜湊反而比閉雜湊節省儲存空間
雜湊表相關
雜湊函式 hash function 又名雜湊函式,是電腦科學中乙個重要的課題。什麼是雜湊函式呢?其實,這個概念並沒有乙個嚴格的定義。一般說來,雜湊函式滿足以下的條件 1 對輸入值運算,得到乙個固定長度的摘要 hash value 2 不同的輸入值可能對應同樣的輸出值 不過,僅僅滿足上面這兩條的函式...
LeetCode鍊錶相關問題總結
獲取鍊錶的長度 兩種方法 listnode frist head int length 0 先獲得鍊錶的長度 while frist null 或者 listnode frist head int length 1 先獲得鍊錶的長度 while frist.next null 區別就是使用第二種方法...
表相關操作
使用t sql建立表 use database name 指向操作的資料庫 go 批處理的標記 create table table name 新建表 column name 資料型別 identity 1000,1 not null,最後一列不需要逗號 go說明 資料型別 int varchar ...