赞
踩
哈希表中可能会出现哈希冲突,即多个数据项映射到相同的桶。
常见的冲突解决方法包括链地址法(Chaining)和线性探测法(Linear Probing)。
例题:
有序表 A[20] = {4,6,12,20,28,38,50,70,88,100},使用哈希查找算法找出元素 20
为了使用哈希查找方法实现有序表A[20]:
h(x) = x % 10
。对于整数,这个函数将把每个元素映射到一个在0到9之间的位置。以下是插入过程的步骤:
hashTable[10] = {NULL}
,其中 NULL
表示空位置。h(x) = x % 10
index = h(x)
hashTable[index]
为 NULL
,则将x插入到 hashTable[pos]
hashTable[index]
不为 NULL
,则进行线性探索,寻找空位置。线性探索可以从 index + 1
开始,直到找到空位置。h(4) = 4 % 10 = 4
, hashTable[4]
为空,插入。h(20) = 12 % 10 = 0
,hashTable[0]
为空,插入。h(50) = 50 % 10 = 0
,但 hashTable[0]
已被占用,进行线性探索,hashTable[1]
为空,插入。最终的哈希表 hashTable 将包含有序表 A 的元素,可能有一些位置为 NULL,表示在插入过程中没有发生冲突。
为了查找表中的一个元素x,我们同样使用哈希函数计算其哈希值,然后在哈希表中定位该值。
如果在定位的位置找到了元素 x,则查找成功;如果找到了 NULL,则说明元素 x 不在表中。
需要注意的是,线性探索虽然简单,但在高负载情况下(即哈希表的装载因子较高)会导致性能下降,因为可能会出现较长的查找链。
在实际应用中,可能会采用更复杂的哈希函数和冲突解决策略来提高效率。
#include <iostream> #include <vector> using namespace std; // 哈希表的大小 const int HASH_TABLE_SIZE = 10; // 哈希表 vector<int> hashTable(HASH_TABLE_SIZE, 0); // 初始化为NULL // 哈希函数 int hashFunction(int key) { return key % HASH_TABLE_SIZE; } // 线性探查 int linearProbing(int key) { int index = hashFunction(key); while (hashTable[index] != 0 && hashTable[index] != key) { index = (index + 1) % HASH_TABLE_SIZE; // 线性探查 } return index; } // 插入键值对 void insert(int key) { int index = linearProbing(key); if (hashTable[index] == 0) { hashTable[index] = key; } else { cout << "冲突发生,键 " << key << " 已存在。" << endl; } } // 查找键 int search(int key) { int index = hashFunction(key); while (hashTable[index] != 0) { if (hashTable[index] == key) { return index; } index = (index + 1) % HASH_TABLE_SIZE; // 线性探查 } return -1; // 未找到键 } int main() { // 初始化有序表 int A[10] = {4, 6, 12, 20, 28, 38, 50, 70, 88, 100}; // 插入元素 for (int i = 0; i < 10; ++i) { insert(A[i]); } for (int i = 0; i < 10; ++i) { cout << hashTable[i] << " "; } cout << endl; // 搜索元素 int keyToSearch = 20; int index = search(keyToSearch); if (index != -1) { cout << "键 " << keyToSearch << " 在哈希表中的位置是: " << index << endl; } else { cout << "键 " << keyToSearch << " 在哈希表中未找到。" << endl; } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。