雜湊衝突及解決方法
雜湊表查詢效能分析
雜湊表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...