设有序顺序表中的元素依次为17, 94, 54, 70, 75, 03, 09, 12, 53, 61, 77, 65, 89, 90。试画出对其进行折半查找时的判定树, 并计算查找成功的平均查找长度和查找不成功的平均查找长度。
时间: 2023-07-27 11:33:09 浏览: 150
小白算法积累——顺序表6#有序顺序表 +删除重复元素
下面是对给定有序顺序表进行折半查找的判定树:
```
54
/ \
12 75
/ \ / \
09 17 61 89
/ \ \
03 53 77
/ \
65 70
\
90
```
对于查找成功的情况,平均查找长度为 $ASL_s=\frac{\sum_{i=1}^{n}s_i}{n}$,其中 $s_i$ 表示第 $i$ 个元素的查找长度,$n$ 表示表中元素的个数。对于查找成功的情况,每个元素的查找长度可以通过判定树上的路径长度来计算,即根节点到叶节点的距离。因此,可以按照如下方式计算平均查找长度:
$ASL_s=\frac{1\times 1+2\times 1+3\times 2+4\times 2+5\times 2+6\times 3+7\times 3+8\times 2+9\times 3+10\times 3+11\times 3+12\times 4+13\times 4+14\times 4}{14}=2.929$
对于查找不成功的情况,平均查找长度为 $ASL_u=\frac{\sum_{i=1}^{n}u_i}{n}$,其中 $u_i$ 表示在表中查找不成功的情况下,要比较的元素个数。因为折半查找的每一步都可以将待查找区间折半,所以在查找不成功的情况下,最多需要比较 $\log_2 n$ 次。因此,可以按照如下方式计算平均查找长度:
$ASL_u=\frac{\log_2 n}{2}=\frac{\log_2 14}{2}=1.807$
阅读全文