1.1 除法hash表
h(k)=k mod m, 這裡m不應該是2的p冪次,否則對m取模等價於取k的低p位,除非k的低p位足以區分各個記錄。當k
是乙個按基數
2^p解釋的字串時,選
m=2^p-1
不好,因為對
k的各個字元進行排列並不會改變其雜湊值.
m的選擇應該取與2的整數冪不太接近的質數。
1.2乘法hash表
用關鍵字k乘以常數a(0並取出結果的小數部分,然後用m乘以這個值再取floor,即h(a)=floor =floor,這是對m沒有什麼要求,可以選為2的某個冪次。
假設計算機的字長為w位,而關鍵字k可以用乙個字長來表示,令a為的乙個數,一般取做**分割數0.618,令s=a*2^w。先用s乘以k,結果是乙個2w位的數,可以表示為2^r1*w0+r0.這裡r1為高位字[2w到w+1],而r0為低位字[w到1]。
1.3解決衝突的方法
1.3.1
開放定址法:
hi=(h(key)+di)mod m,即當發生衝突時,依次按照序列di來看有沒有有空的地方就插進去。這裡的關鍵在於增量序列di,可以取偽隨機序列或者線性序列。
1.3.2
再hash法:hi=rhi,即換個hash函式
1.3.3
Hash 雜湊 雜湊 基礎知識梳理
字典的兩種描述方法 跳表和雜湊 hash 限制適用範圍 有序陣列 採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續的儲存空間愛你被稱為雜湊表或者雜湊表。雜湊技術是在記錄的儲存位置和他的關鍵字之間建立乙個確定的對應關係f 雜湊函式 使得每個關鍵字key對應乙個儲存位置f key 根據這個對應關係...
鍊錶基礎知識
1.為什麼用linkedlist array是乙個非常有用的資料結構,但是有兩個限制 1 當改變原有array的size的時候需要將原有array的所有元素copy到新array中去 2 由於array的資料儲存在記憶體中是連續空間,導致插入和刪除都會帶來其他資料的移動。鍊錶是由一系列的節點組成,這...
鍊錶基礎知識
鍊錶之前要有一定的c語言基礎,如指標,結構體,分配記憶體malloc等,切勿操之過急。第一次接觸可能有點難度,我是把書上的 反覆敲,反覆看注釋,搞了好幾天,才漸漸懂了。閒話少說,上 include include 要用到malloc struct llist int main printf 聯絡人 ...