常用處理衝突的思路:
一旦產生了衝突(該位址已有其他元素),就按某種規則去尋找另一空位址。
hi(key) = (h(key)+dj) mod tablesize (1≤i<tablesize)
dj決定了不同的解決衝突方案:線性探測、平方探測、雙雜湊。
#define maxtablesize 100000 /* 允許開闢的最大雜湊表長度 */typedefint elementtype; /*
*/typedef
int index; /*
雜湊位址型別
*/typedef index position;
/*資料所在位置與雜湊位址是同一型別
*//*
雜湊單元狀態型別,分別對應:有合法元素、空單元、有已刪除元素
*/typedef
enum
entrytype;
typedef
struct hashentry cell; /*
雜湊表單元型別
*/struct
hashentry;
typedef
struct tblnode *hashtable; /*
雜湊表型別
*/struct tblnode ;
int nextprime( int
n )
returnp;}
hashtable createtable(
inttablesize )
雜湊表表長tablesize = 13(裝填因子α = 9/13≈ 0.69);
雜湊函式為:h(key) = key mod 11。
用線性探測法處理衝突,列出一次插入後的雜湊表,並估算查詢效能
平方探測法:以增量序列12
,-12, 22, -22, ......, q2, -q2且q ≤ [ tablesize/2 ] 迴圈試探洗乙個儲存位址。
是否有空間,平方探測就能找得到?
有定理顯示:如果雜湊表長度tablesize是某個4k+3(k是正整數)形式的素數時,平方探測法就可以探查到整個雜湊表空間。
position find( hashtable h, elementtype key )else
}return newpos; /*
此時newpos或者是key的位置,或者是乙個空單元的位置(表示找不到)*/}
bool
insert( hashtable h, elementtype key )
else
}
雙雜湊探測法:di為i*h2(key),h2(key)是另乙個雜湊函式探測序列成:h2(key), 2h2(key),3h2(key), ......
h2(key) = p - (key mod p)
其中:p < tablesize, p、tablesize都是素數。
實用最大裝填因子一般取0.5≤α≤0.85
分離鏈結法(separate chaining)
char elementtype[keylength+1]; /*
*/typedef
int index; /*
雜湊位址型別
*//*
******* 以下是單鏈表的定義 *******
*/typedef
struct lnode *ptrtolnode;
struct
lnode ;
typedef ptrtolnode position;
typedef ptrtolnode list;
/******** 以上是單鏈表的定義 *******
*/typedef
struct tblnode *hashtable; /*
雜湊表型別
*/struct tblnode ;
hashtable createtable(
inttablesize )
returnh;}
position find( hashtable h, elementtype key )
bool
insert( hashtable h, elementtype key )
else }
void
destroytable( hashtable h )
}free( h->heads ); /*
釋放頭結點陣列
*/free( h ); /*
釋放雜湊表結點 */}
處理Hash衝突的方法
1 開發定址發 h i h key di mod m 其中i 1,2,3 m 1 m hash表的長度 h key 為hash函式 di為增量序列,序列的意思是如果得到的h i 上已經有元素,取di 1。根據di的取值方式不同可以分為3中情況 1 線性探測再雜湊 這是di取值為1,2,3 m 1,缺...
方法衝突 換種方法處理學生衝突
小學生很多不會處理和同學之間的關係,常因一些小事而發生矛盾,甚至訴諸 武力 最後只好把 官司 告到我們班主任這兒來,讓老師斷案,平息戰爭。作為班主任,我每天都會處理好幾起這樣的事件,以前我遇到有矛盾或者衝突的時候,解決的辦法就是 將爭吵打鬧的雙方叫在一起,了解事情的原因,對過錯多的一方批評教育一通,...
雜湊表and處理衝突的方法
雜湊法又稱雜湊法 雜湊法以及關鍵字位址計算法等,相應的表稱為雜湊表。這種方法的基本思想是 首先在元素的關鍵字k和元素的儲存位置p之間建立乙個對應關係f,使得p f k f稱為雜湊函式。建立雜湊表時,把關鍵字為k的元素直接存入位址為f k 的單元 以後當查詢關鍵字為k的元素時,再利用雜湊函式計算出該元...