给定11个关键字序列22,66, 9,11,6,33,7,56,18,19,16试分别用二分查找(假设已排序)、二叉排序树查找(不做平衡)、散列查找的开地 址法(用线性探查法,模取13的HASH函数)和拉链法(模取7的HASH函数))来实现查找的平均查找长度
时间: 2024-03-25 22:38:08 浏览: 53
1. 二分查找:
首先对关键字序列进行排序,得到6,7,9,11,16,18,19,22,33,56,66。然后进行二分查找,每次将查找区间折半,直到找到目标元素或者区间为空。平均查找长度为log2(11)≈3.46。
2. 二叉排序树查找:
将关键字序列依次插入到二叉排序树中,得到如下图所示的树结构:
```
22
/ \
9 66
/ \ \
6 11 56
\ \
18 33
/ \ \
16 19 7
```
对于每个节点,如果目标元素比节点小,则继续在左子树中查找;如果目标元素比节点大,则继续在右子树中查找;如果目标元素等于节点,则查找成功。平均查找长度取决于树的形态,最坏情况下可能退化成链表,平均查找长度为O(logN),其中N为节点数,这里N=11。
3. 散列查找-开地址法:
使用线性探查法,将关键字序列插入到散列表中,同时使用模取13的哈希函数计算出每个元素的散列地址。如果该地址已经被占用,则向后依次查找下一个地址,直到找到一个空位或者遇到自己的元素。查找时同样使用哈希函数计算出目标元素的散列地址,然后依次查找该地址及其后续地址,直到找到目标元素或者遇到空位。平均查找长度取决于哈希函数和散列表的装填因子,这里假设装填因子为1,即每个地址上最多只存储一个元素。那么平均查找长度为(1/2)*(1+1/1+1/2+1/3+...+1/12)≈3.08。
4. 散列查找-拉链法:
使用模取7的哈希函数,将关键字序列插入到哈希表中,同时使用链表将哈希冲突的元素串联起来。查找时同样使用哈希函数计算出目标元素的散列地址,然后在对应的链表中查找目标元素。平均查找长度取决于哈希函数和哈希表的装填因子,这里假设装填因子为1,即每个链表上最多只存储一个元素。那么平均查找长度为(1/2)*(1+1/1+1/1+1/1+1/1+1/1+1/1)≈1.5。
综上所述,四种方法的平均查找长度分别为3.46、O(logN)、3.08和1.5。其中散列查找-拉链法的平均查找长度最小,效率最高。
阅读全文