書籍推薦
https://pan.baidu.com/share/init?surl=dF8XlFN
《大話數據結構》——https://www.loneway.ren/book/20006
散列
散列又稱為哈希疲憋,是把任意長度的輸入(又叫做預映射pre-image)通過散列算法變換成固定長度的輸出二驰,該輸出就是散列值仅偎。這種轉換是一種壓縮映射哈蝇,也就是现使,散列值的空間通常遠小于輸入的空間堡赔,不同的輸入可能會散列成相同的輸出殉疼,所以不可能從散列值來確定唯一的輸入值欢搜。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數乾胶。
- 負載因子
- 常用散列函數
1. 數學分析法
2. 折疊法
3. 中平方和法
4. 除余法
5. 基數轉換法
- 沖突消解技術
沖突消解技術從實現上可分為內消解法和外消解法抖剿。
- 內消解法:
內消解的基本方法稱為開地址法朽寞,其基本思想是插入數據并發(fā)現沖突是,設法在基本存儲區(qū)為需要插入的數據另行安排一個位置斩郎。于是設計了一種叫計算位置安排方式——探查方式脑融。
常用的探查方式有線性探查和雙散列探查。
1.線性探查:
2.雙散列探查:
- 外消解法:
外消解法一半需要借助外部存儲區(qū)間解決沖突缩宜,重用的方法有溢出區(qū)法和桶散列法肘迎。
- 溢出區(qū)法:
當插入關鍵碼的散列位置沒有數據時就直接插入,發(fā)生沖突時將相應數據和關鍵碼一起順序存入溢出區(qū)锻煌。對應檢索和刪除也是先找散列位置妓布,如果數據與關鍵碼不匹配,則去溢出區(qū)順序檢索宋梧,直到找到或檢索完匣沼。
- 桶散列法(拉鏈法):
散列表的每個元素只是一個引用域,飲用者一個保存實際數據的存儲桶捂龄。拉鏈法中一個存儲桶就是一個連表的頭節(jié)點
拉鏈法