什么是哈希表,哈希函数及处理冲突的方法都有哪些?根据题3中的关键字序列,采用 除留余数法作为哈希函数,链地址法作为处理冲突的方法绘制哈希表。
时间: 2024-02-25 14:59:00 浏览: 30
哈希表(Hash Table)是一种根据关键字(Key)直接访问内存存储位置的数据结构,也称为散列表。在哈希表中,通过哈希函数将关键字映射到一个特定的位置,使得查找、插入和删除操作的时间复杂度均为O(1)。
哈希函数是将关键字映射到哈希表中的一个位置的函数,它将任意长度的输入(即关键字)映射到固定长度的输出(即哈希值)。常用的哈希函数有除留余数法、乘法哈希法、全域哈希法等。
处理哈希冲突的方法有以下几种:
1. 链地址法(Chaining):将哈希表中的每个槽位设为一个链表,哈希函数映射到槽位后,将元素插入对应的链表中。
2. 开放地址法(Open Addressing):当哈希冲突发生时,不使用链表,而是在哈希表中寻找另一个空槽位,直到找到为止。开放地址法又包括线性探查、二次探查、双重哈希等几种方法。
3. 再哈希法(Rehashing):当哈希冲突发生时,使用另一个哈希函数再次计算哈希值,直到找到空槽位为止。
现在,我们根据题目中给定的关键字序列,采用除留余数法作为哈希函数,链地址法作为处理冲突的方法绘制哈希表。假设哈希表的大小为10,那么对于每个关键字,我们计算其哈希值,然后插入到对应的链表中。具体过程如下:
1. 对于关键字25,计算其哈希值为25 % 10 = 5,插入到哈希表中第5个槽位的链表中。
2. 对于关键字18,计算其哈希值为18 % 10 = 8,插入到哈希表中第8个槽位的链表中。
3. 对于关键字3,计算其哈希值为3 % 10 = 3,插入到哈希表中第3个槽位的链表中。
4. 对于关键字21,计算其哈希值为21 % 10 = 1,插入到哈希表中第1个槽位的链表中。
5. 对于关键字65,计算其哈希值为65 % 10 = 5,插入到哈希表中第5个槽位的链表中。
6. 对于关键字98,计算其哈希值为98 % 10 = 8,插入到哈希表中第8个槽位的链表中。
7. 对于关键字31,计算其哈希值为31 % 10 = 1,插入到哈希表中第1个槽位的链表中。
8. 对于关键字19,计算其哈希值为19 % 10 = 9,插入到哈希表中第9个槽位的链表中。
9. 对于关键字22,计算其哈希值为22 % 10 = 2,插入到哈希表中第2个槽位的链表中。
10. 对于关键字12,计算其哈希值为12 % 10 = 2,插入到哈希表中第2个槽位的链表中。
11. 对于关键字0,计算其哈希值为0 % 10 = 0,插入到哈希表中第0个槽位的链表中。
12. 对于关键字29,计算其哈希值为29 % 10 = 9,插入到哈希表中第9个槽位的链表中。
13. 对于关键字101,计算其哈希值为101 % 10 = 1,插入到哈希表中第1个槽位的链表中。
最终得到的哈希表如下:
```
0 -> 0
1 -> 21 -> 31 -> 101
2 -> 22 -> 12
3 -> 3
4 ->
5 -> 25 -> 65
6 ->
7 ->
8 -> 18 -> 98
9 -> 19 -> 29
```
其中,每个箭头后面的数字表示对应关键字在链表中的顺序。