hash函式
在一般的線性表、樹結構中,資料的儲存位置是隨機的,不像陣列可以通過索引能一步查詢到目標元素。為了能快速地在沒有索引之類的結構中找到目標元素,需要為儲存位址和值之間做一種對映關係h(key),這個h就是雜湊函式,用公式表示:
h(key)=addr
h:雜湊函式
key:關鍵字,用來唯一區分物件的
把線性表中每個物件的關鍵字通過雜湊函式h(key)對映到記憶體單元位址,並把物件儲存到該記憶體單元,這樣的線性表儲存結構稱為雜湊表或雜湊表。
構造雜湊函式
構造雜湊函式的方法有很多種,下面介紹幾種常見的演算法。在設定雜湊函式時,通常要考慮以下因素:
○ 計算函希函式所需的時間
○ 關鍵字的長度
○ 雜湊表的長度
○ 關鍵字的分布情況
○ 記錄的查詢頻率
1. 直接定址法
直接定址法取關鍵字或關鍵字的某個線性函式作為雜湊位址,即
h(key) = key
或h(key) = a*key + b
其中a,b為常數,調整a與b的值可以使雜湊位址取值範圍與儲存空間範圍一致。這種方法簡單並且不會發生衝突,適用於關鍵字分布基本連續的情況,若關鍵字分布不連續,將造成儲存空間的巨大浪費。
2. 數字分析法
數字分析法是提取關鍵字中隨機性較好的數字位,將其拼接作為雜湊位址,適用於所有關鍵字已知的情況,並需要對關鍵字中每位的取值情況進行分析。如下圖,經分析c,f,g,h這幾位取值較為集中,隨機性不好,不適用於雜湊函式,而a,e取值分散,可將這兩個數字拼接位雜湊位址。需要注意,提取多少位數字應該根據雜湊表長度來確定。
位 h g f e d c b a 提取結果
6 1 3 1 7 6 3 2 12
6 2 3 2 6 8 7 5 25
6 2 3 4 3 6 3 4 44
6 2 7 0 6 6 1 6 6
6 1 7 7 4 6 3 8 78
6 1 3 8 1 2 6 1 81
6 1 3 9 4 2 2 0 90
3. 除留餘數法
除留餘數法採用取模運算,把關鍵字除以某個不大於雜湊表表長的整數得到的餘數作為雜湊位址。雜湊函式形式為:
h(key) = key % p
除留餘數法的關鍵是選好p,使得記錄集合中的每個關鍵字通過該整數轉換後對映到雜湊表範圍內任意位址上的概率相等,從而盡可能減少發生衝突的可能性。
例如,p不要設為2的次冪,如設p=25,則對p的取模相當於擷取p的最低5位二進位制數,這等於將關鍵字的所有高位二進位制數都忽略了。理論研究表明,p取奇數比偶數效果好,p取不大於雜湊表長度的質數效果最好。
507683的二進位制 1111011111100100011
507683%2相當於取低5位二進位制數
什麼是WPF 秒懂 !
一開始聽到 wpf在簡單做了幾個頁面之後,發現。原來如此!so easy 但又so m agic。為什麼說它簡單?由於它簡直就是 html 的c s 模式嘛!微軟退出 wpf,是為了讓桌面應用更加美觀。我覺得當中增加了非常多b s 模式的理念。尤其是樣式的控制方面。當然,各種控制項仍然是我們高速開發...
什麼是Hash演算法
hash 雜湊 本意是混雜 拼湊 重新表述。hash演算法又叫雜湊演算法 雜湊函式。它是一種單向密碼體制,即乙個從明文到密文的不可逆的對映,只有加密過程,沒有解密過程。同時hash函式可以將任意長度的輸入得到固定長度的輸出。hash函式這種單向特徵和固定輸出資料長度的特徵使它可以生成訊息或者資料。h...
秒懂一致性雜湊演算法
一致性雜湊演算法在1997年由麻省理工學院提出的一種分布式雜湊 dht 實現演算法,設計目標是為了解決網際網路中的熱點 hot spot 問題,初衷和carp十分類似。一致性雜湊修正了carp使用的簡 單雜湊演算法帶來的問題,使得分布式雜湊 dht 可以在p2p環境中真正得到應用。一致性hash演算...