- 哈希查找简介
- 实现(java)
- 时间复杂度
1.哈希查找简介
- 哈希查找, 构建哈希表再查找, 查找到开放单元或者循环回到原位置则查找失败
- 构造哈希函数的方法: 直接定址法\平方取中法\数字分析法\折叠法\随机函数法\除留余数法
- 哈希冲突解决方法: 开放定址法(线性探测\二次探测)\再哈希法\链地址法\公共溢出区
2.实现(java)
public class HashSearch {
public static void main(String[] args) {
int[] arr = {40, 35, 5, 63, 21, 82, 96, 77, 52, 19};
int index = search(arr, 82);
if(-1 != index) {
System.out.println("查询成功, 元素位于数组第" + (index + 1) + "位");
}else {
System.out.println("查询失败");
}
}
public static int search(int[] arr, int key) {
int[] hashArr = new int[arr.length];
for(int i = 0; i < arr.length; i++) {
createHash(hashArr, arr[i]);
}
int address = hash(hashArr, key);
while (hashArr[address] != key) {
address = (++address) % hashArr.length;
if(hashArr[address] == 0 || address == hash(hashArr, key)) {
return -1;
}
}
return address;
}
public static void createHash(int[] hashArr, int item) {
int address = hash(hashArr, item);
while (hashArr[address] != 0) {
address = (++address) % hashArr.length;
}
hashArr[address] = item;
}
public static int hash(int[] hashArr, int item) {
return item % hashArr.length;
}
}
3.时间复杂度
时间复杂度为O(1)