衝突的處理方法

2022-07-30 23:09:18 字數 2325 閱讀 9709

常用處理衝突的思路:

一旦產生了衝突(該位址已有其他元素),就按某種規則去尋找另一空位址。

hi(key) = (h(key)+dj) mod tablesize (1≤i<tablesize)

dj決定了不同的解決衝突方案:線性探測、平方探測、雙雜湊。

#define maxtablesize 100000 /* 允許開闢的最大雜湊表長度 */typedef 

int 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的元素時,再利用雜湊函式計算出該元...