二次探測法

2021-10-05 17:57:40 字數 1006 閱讀 8201

設雜湊表長為11,雜湊函式為hash (key)=key%11。存在關鍵碼,採用二次探測法處理衝突,建立的hash表為( )

二次探測法:採用開放定址法處理衝突中的二次探測再雜湊(也即是題目中的二元探測法),則雜湊函式變為hash(key) = (hash(key) + d) % 11,其中d = 1^2, -1^2, 2^2, -2^2, 3^2,……,則開始計算。

對於43,代入公式為hash(43) = 43 % 11 = 10, 則位址為10;

對於7,代入公式為hash(7) = 7 % 11 = 7,則位址為7;

對於29,代入公式為hash(29) = 29 % 11 = 7, 與7衝突,則採用二次探測進行消除衝突, 繼續(7 + 1) % 11 = 8,沒有衝突,則位址為8;

對於22,代入公式hash(22) = 22 % 11 = 0, 則位址為0;

對於16,代入公式hash(16) = 16 % 11 = 5, 則位址為5;

對於92,代入公式hash(92) = 92 % 11 = 4,則位址為4;

對於44,代入公式hash(44) = 44 % 11 = 0, 與22的位址衝突,則繼續(0 + 1) % 11 = 1,沒有衝突,則位址為1;

對於8, 代入公式hash(8) = 8 % 11 = 8, 與29有衝突,則繼續(8 + 1) % 11 = 9, 沒有衝突,則位址為9;

對於19,代入公式hash(19) = 19 % 11 = 8. 與 29有衝突,則繼續(8 + 1) * 11 = 9, 與8有衝突,繼續(8 - 1) % 11 = 7, 與7有衝突,則繼續(8 + 4) % 11 = 1, 與44有衝突,則繼續(8 - 4) % 11 = 4, 與92有衝突,則繼續(8 + 9) % 11 = 6, 沒有衝突,則位址為6.

所以最後得到的hash表為下圖所示:

pat a1078(正向二次探測法,找素數)

三個注意點 quadratic probing with positive increments only is used to solve the collisions.正向二次探測法處理衝突 quadratic 平方,二次 probing 探測 increment 增加,增長 collision...

雜湊表 開放位址法(二次探測以及在雜湊法)

首先你要知道什麼二次探測,在雜湊法都是用來解決雜湊衝突的。在雜湊法,就是有兩個雜湊方法,第乙個雜湊化方法,確定初始位置,衝突就執行第二個雜湊化方法。注意 在雜湊法第二個雜湊化函式的要求 1.第二個雜湊化函式不能和第乙個一樣 2.不能輸出0 舉個例子 第二個方法可以設計成這樣 第二個雜湊函式 計算下標...

雜湊之閉雜湊(線性探測 二次探測)

hashtable.h include include include include common.h 雜湊表位置的狀態 typedef enum state state typedef int datatype typedef char datatype 轉換int函式指標 typedef si...