[size=x-large]已知乙個線性表(38,25,74,63,52,48),假定採用雜湊函式h(key)=key%7計算雜湊位址,並雜湊存
儲在雜湊表a[0..6]中,若採用線性探測方法解決衝突,則在該雜湊表上進行等概率成功查詢的平均查詢長度為__________.
(52)a.1.5 b.1.7 c.2.0 d.2.3
分析:利用該雜湊函式雜湊儲存結果為
68|48 | |38|25|74|52
位置 0 1 2 3 4 5 6
平均查詢長度=總的查詢次數/元素數=(1*3+2*1+3*1+4*1)/6=2.0
要計算雜湊表上的平均查詢長度,我們首先必須要知道在建立這個雜湊表時,每個資料儲存時進行了幾次雜湊。這樣就知道哪乙個元素,查詢的長度是多少。雜湊表的填表過程如下:首先存入第乙個元素38,由於h(38)=38%7=3,又因為3號單元現在沒有資料,所以把38存入3號單元。 接著存入第二個元素25,由於h(25)=25%7=4,又因為4號單元現在沒有資料,所以把25存入4號單元。 接著存入第三個元素74,由於h(74)=74%7=4,此時的4號單元已經被25佔據,所以進行線性再雜湊,線性再雜湊的公式為:hi=(h(key)+di)% m ,其中的di=1,2,3,4...。所以h1=(4+1)%7=5,此時的單元5沒有存資料,所以把74存入到5號單元。 接著存入第四個元素63,由於h(63)=63%7=0,此時的0號單元沒有資料,所以把63存入0號單元。 接著存入第五個元素52,由於h(52)=52%7=3,此時的3號單元已被38佔據,所以進行線性再雜湊:h1=(3+1)%7=4,但4號單元也被佔據了,所以再次雜湊:h2=(3+2)%7=5,但5號單元也被佔據了,所以再次雜湊:h3=(3+3)%7=6,6號單元為空,所以把52存入6號單元。 最後存入第六個元素48,由於h(48)=48%7=6,此時的6號單元已被佔據,所以進行線性再雜湊:h1=(6+1)%7=0,但0號單元也被佔據了,所以再次雜湊:h2=(6+2)%7=1,1號單元為空,所以把48存入1號單元。 如果乙個元素存入時,進行了n次雜湊,相應的查詢次數也是n,所以38,25,63這三個元素的查詢長度為1,74的查詢長度為2,48的查詢長度為3,52的查詢長度為4。所以平均查詢長度為:(1+1+1+2+3+4)/6=2。 [/size]
線性探測解決hash衝突
我們來簡單的例子說明什麼是線性探測 假設我們有乙個陣列 假設我們用當前公式計算當前資料在陣列中的下標位置 int i num 11 假設我們有一組資料需要放置在陣列中 那麼他們對應的下標位置應該分別為 資料 1 下標 1 11 1 資料 2 下標 2 11 2 資料 3 下標 3 11 3 資料 1...
線性探測法解決雜湊衝突
線型探測法 解決雜湊衝突的一種方法 include include using namespace std const int indexbox 10 雜湊表最大元素 const int maxnum 7 最大資料個數 void printdata int data,int n void creat...
關於解決Hash衝突的線性探測開放位址法和拉鍊法
在實際應用中,無論如何構造雜湊函式,衝突是無法完全避免的。鏈位址法解決衝突的做法是 如果雜湊表空間為 0 m 1 設定乙個由 m 個指標分量組成的一維陣列 st m 凡雜湊位址為 i 的資料元素都插入到頭指標為 st i 的鍊錶中。這種方法有點近似於鄰接表的基本思想,且這種方法適合於衝突比較嚴重的情...