雜湊表筆記

2021-09-03 07:15:56 字數 2374 閱讀 5917

雜湊衝突及解決方法

雜湊表查詢效能分析

雜湊表c語言實現(開放位址、線性檢測法)

參考資料

查詢的本質是找到一直物件的位址,有兩種方法:

核心: 儲存位置 = f(關鍵字)

該函式f的設計應滿足兩個要求

計算簡單:如果該函式計算比直接遍歷還複雜就得不償失了

盡量均勻:不同關鍵字的函式值均可能均勻分布,避免積聚在某個位址附近

衝突是指兩個關鍵字經過雜湊函式後得出的位址相同的情況,比如下圖所示為序列[47, 7, 29, 11, 9, 84, 54, 20, 30]在tablesize=13的情況下的衝突情況,解決該衝突的方法是線性探測法

可見,關鍵字29,84等都出現因雜湊衝突而需要重新找儲存位置的情況。

解決雜湊衝突常用的方法有

開放定址法:若發生第i次衝突,試探的下乙個位址將增加di,fi(

key)

=(f(

key)

+di)

mod ta

bles

izef_i(key) = (f(key)+d_i) \texttablesize

fi​(ke

y)=(

f(ke

y)+d

i​)mod ta

bles

ize,根據di序列的不同,可有

線性檢測法:di=

1,2,

3...

d_i = 1,2,3...

di​=1,

2,3.

.., 但容易出現積聚的情況

二次檢測法:di=

12,−

12,2

2,−2

2...

d_i = 1^2, -1^2, 2^2, -2^2...

di​=12

,−12

,22,

−22.

..隨機探測法:di序列由隨機函式生成(給定同一種子生成相同序列)

再雜湊函式法:事先準備多個雜湊函式,當發現衝突時就換一種雜湊函式,但是相應的也會增加計算時間

雜湊表的效能使用以下兩個指標進行分析

/**

* 雜湊表實現, 衝突解決方式為開放定址法線性檢測

**/#include #include #define ok 1

#define error 0

#define success 1

#define unsuccess 0

#define hashsize 12 // size of hash

#define nullkey -32768 // size of hash

typedef struct hashtable;

int m = 0; // 雜湊表長,全域性變數

// 初始化雜湊表

int inithashtable(hashtable *h)

for (int i = 0;i < m; i++)

return ok;

}int hash(int key)

void inserthash(hashtable *h, int key)

h->elem[addr] = key;

}// 查詢關鍵字

int searchkey(hashtable h, int key)

}printf("成功查詢 key=%d.\n", key);

return success;

}int main(int argc, char **argv)

printf("\\n");

//插入資料

printf("現在插入資料,請輸入(a代表結束哦).\n");

while(scanf("%d", &i) == 1 && num < hashsize)

num++;

inserthash(&h,i);

if(num > hashsize)

} //列印插入資料後hash表的內容

printf("插入資料後hash表的內容為:\n");

for(i = 0; i < hashsize; i++)

printf("\n");

printf("現在進行查詢.\n");

searchkey(h, 12);

searchkey(h, 50);

return 0;

// 測試用資料 12 25 37 15 16 29 48 67 56 34 22 47

}

《大話資料結構》——程杰

《資料結構》——浙江大學mooc,陳越

雜湊表筆記

md5 不管字串多大,生成的md5長度都是16或32位。幾乎不可逆 字串改變,md5變化很大 typedef enum stat 雜湊表儲存的是 鍵值對 typedef int keytype typedef int caltype typedef size t hashfunc keytype k...

雜湊表。筆試面試知識整理

雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。雜湊表的實現主要需要解決兩個問題,雜湊函式和衝突解決。雜湊函式也叫雜湊函式,它對不同的輸出值得到乙個固定長度的訊息摘要。理...

python列表筆記

1.列表可以包含任意字元 結構 型別的資料 例 shuaige 帥 有錢 高 95599,true,等等 print shuaige print shuaige 輸出顯示如下 帥 有錢 高 95599,true,等等 帥 有錢 高 95599,true,等等 牛鼻 檢測 解藥 是否在inventor...