線性探針是第二種解決雜湊衝突的辦法。這樣的辦法的基本思想就是當遇到雜湊衝突時,尋找下乙個空位,直到找到空位為止。
先插入乙個值s,例如以下圖。
插入其它的一些值,這些值的哈系沒有衝突,得到下圖的結果。
再插入乙個值h,因為h與a的哈系衝突,因此須要尋找乙個空的位置。
找到了空位
插入
public class linearprobest
public value get(key key)
}return null;
}public void put(key key, value value)
// 找到了已經存在的值
if(key.equals(key2)) }}
private int hash(key key)
}
隨著資料量的新增,因為衝突的雜湊值新增因此速度會越來越慢。在衝突非常少的情況下,每乙個操作的複雜度近似為1。在衝突非常多的情況下,每乙個操作的複雜度可達到n。所以一般取m=n/2,這樣效能最佳,又不浪費空間。
有乙個固定大小的停車場,每輛車都會在隨機的位置i停下,假設停車位i已經被占用了,那麼尋找停車位i+1、i+2等。
線性探針演算法事實上就是knuth停車問題。
線性探測法解決雜湊衝突
線型探測法 解決雜湊衝突的一種方法 include include using namespace std const int indexbox 10 雜湊表最大元素 const int maxnum 7 最大資料個數 void printdata int data,int n void creat...
演算法 開放定址法解決雜湊衝突方式
開放定址法 又稱開放定址法,當雜湊衝突發生時,從發生衝突的那個單元起,按照一定的次序,從雜湊表中尋找乙個空閒的單元,然後把發生衝突的元素存入到該單元。這個空閒單元又稱為開放單元或者空白單元。開放定址法需要的表長度要大於等於所需要存放的元素數量,非常適用於裝載因子較小 小於0.5 的雜湊表。查詢時,如...
演算法 開放定址法解決雜湊衝突方式
開放定址法 又稱開放定址法,當雜湊衝突發生時,從發生衝突的那個單元起,按照一定的次序,從雜湊表中尋找乙個空閒的單元,然後把發生衝突的元素存入到該單元。這個空閒單元又稱為開放單元或者空白單元。開放定址法需要的表長度要大於等於所需要存放的元素數量,非常適用於裝載因子較小 小於0.5 的雜湊表。查詢時,如...