雜湊函式
雜湊函式
1.直接定址法。取關鍵字或關鍵字的某個線性函式值為雜湊地址。即H(key)=key或H(key) = a·key + b,其中a和b為常數(這種雜湊函式叫做自身函式)
2.數字分析法。分析一組資料,比如一組員工的出生年月日,這時我們發現出生年月日的前幾位數字大體相同,這樣的話,出現衝突的機率就會很大,但是我們發現年月日的後幾位表示月份和具體日期的數字差別很大,如果用後面的數字來構成雜湊地址,則衝突的機率會明顯降低。因此數字分析法就是找出數字的規律,儘可能利用這些資料來構造衝突機率較低的雜湊地址。
3.平方取中法。取關鍵字平方後的中間幾位作為雜湊地址。
4.摺疊法。將關鍵字分割成位數相同的幾部分,最後一部分位數可以不同,然後取這幾部分的疊加和(去除進位)作為雜湊地址。
5.隨機數法。選擇一隨機函式,取關鍵字作為隨機函式的種子生成隨機值作為雜湊地址,通常用於關鍵字長度不同的場合。
6.除留餘數法。取關鍵字被某個不大於雜湊表表長m的數p除後所得的餘數為雜湊地址。即 H(key) = key MOD p,p<=m。不僅可以對關鍵字直接取模,也可在摺疊、平方取中等運算之後取模。對p的選擇很重要,一般取素數或m,若p選的不好,容易產生碰撞。
衝突解決
1.開放定址法;Hi=(H(key) + di) MOD m,i=1,2,…,k(k<=m-1),其中H(key)為雜湊函式,m為雜湊表長,di為增量序列,可有下列三種取法:
1). di=1,2,3,…,m-1,稱線性探測再雜湊;
2). di=12,-12,22,-22,32,…,±k2,(k<=m/2)稱二次探測再雜湊;
3). di=偽隨機數序列,稱偽隨機探測再雜湊。
2. 再雜湊法:Hi=RHi(key),i=1,2,…,k RHi均是不同的雜湊函式,即在同義詞產生地址衝突時計算另一個雜湊函式地址,直到衝突不再發生,這種方法不易產生“聚集”,但增加了計算時間。
3. 鏈地址法(拉鍊法)
4. 建立一個公共溢位區
公共溢位區:
假設雜湊函式的值域為[0,m-1],則設向量HashTable[0…m-1]為基本表,另外設立儲存空間向量OverTable[0…v]用以儲存發生衝突的記錄。
拉鍊法的優缺點:
-
優點:
①拉鍊法處理衝突簡單,且無堆積現象,即非同義詞決不會發生衝突,因此平均查詢長度較短;
②由於拉鍊法中各連結串列上的結點空間是動態申請的,故它更適合於造表前無法確定表長的情況;
③開放定址法為減少衝突,要求裝填因子α較小,故當結點規模較大時會浪費很多空間。而拉鍊法中可取α≥1,且結點較大時,拉鍊法中增加的指標域可忽略不計,因此節省空間;
④在用拉鍊法構造的雜湊表中,刪除結點的操作易於實現。只要簡單地刪去連結串列上相應的結點即可。而對開放地址法構造的雜湊表,刪除結點不能簡單地將被刪結 點的空間置為空,否則將截斷在它之後填人雜湊表的同義詞結點的查詢路徑。這是因為各種開放地址法中,空地址單元(即開放地址)都是查詢失敗的條件。因此在 用開放地址法處理衝突的雜湊表上執行刪除操作,只能在被刪結點上做刪除標記,而不能真正刪除結點。 -
缺點:
指標需要額外的空間,故當結點規模較小時,開放定址法較為節省空間,而若將節省的指標空間用來擴大雜湊表的規模,可使裝填因子變小,這又減少了開放定址法中的衝突,從而提高平均查詢速度。
相關文章
- Fortran雜湊函式庫的使用函式
- 14-2 雜湊函式設計函式
- Day76.雜湊表、雜湊函式的構造 -資料結構函式資料結構
- 雜湊函式與資料完整性 (^=◕ᴥ◕=^)函式
- 雜湊函式(Hash Functions - 雜湊函式)的基本介紹(SHA-2,SHA-256,MD-5,Scrypt,BCrypt等)函式Function
- 如何判斷一個雜湊函式的好壞函式
- 基於雜湊函式的簽名,Part-1函式
- Hash,雜湊,雜湊?
- 七夕也要學起來,雜湊雜湊雜湊!
- 雜湊
- 【尋跡#3】 雜湊與雜湊表
- js 雜湊雜湊值的模組JS
- 雜湊表(雜湊表)原理詳解
- 現代密碼學之加密雜湊函式與訊息認證碼密碼學加密函式
- 雜湊表
- 雜湊碰撞
- 字串雜湊字串
- 樹雜湊
- 2024.3.26 雜湊
- 雜湊索引索引
- 22 | 雜湊演算法(下):雜湊演算法在分散式系統中有哪些應用?演算法分散式
- 安全的雜湊
- 異或雜湊
- 雜湊衝突
- 6.7雜湊表
- 關於雜湊
- 字串雜湊表字串
- 雜湊表2
- redis之雜湊Redis
- 雜湊遊戲之雜湊盒子的趨勢未來可期遊戲
- 雜湊技術【雜湊表】查詢演算法 PHP 版演算法PHP
- 幾道和雜湊(雜湊)表有關的面試題面試題
- 雜湊256,待研究
- 進位制雜湊
- 十二、雜湊表(二)
- 全球覆蓋 雜湊
- 十一、雜湊表(一)
- 雜湊表應用