如何用double hashing解決collision resolution問題

Java小白8888發表於2020-12-16

如何在hash table裡解決collision resolution問題

有一道程式碼題是如何使用開放定址(open addressing)用下面的公式解決hash table裡面的碰撞問題。

A[((k mod N) + 2*i) mod N

這裡的A是一個integer array,用作hash table。假設hash table裡面有10個插槽。

Keys = 8, 5, 13, 7, 2, 18, 6, 11
keys都是正數,這裡,如果插槽等於0,說明插槽是空的,就可以插入keys裡面的值。

程式碼如下

public static void main(String[] args) {
	int number = 10; 
	int[] A = new int [number];
	int[] Keys = {8, 5, 13, 7, 2, 18, 6, 11};		
	for (int i = 0; i < Keys.length; i++) {
		int j = 0;
		// 這是i的位置變數
		int Position = (Keys[i] % N + 3*j) % N;
		// 當插槽不為空的時候
		while (A[Position] != 0) {
			j = j + 1;
			// 這是j的位置變數
			Position = (Keys[i] % N + 3*j) % N;
		}
		//把i賦值給A
		A[Position] = Keys[i];			
	}
	
	for (int i = 0; i < A.length; i++) {
		System.out.println(A[i]);
	}	
}

@hash_table_collision

2018-03-24

相關文章