5.假定对有序表:(3,5,7,24,30,46,63,72,87)进行折半查找,试回答下列问题: 1)画出描述折半查找过程的判定树。 2)若查找元素46,需依次与哪些元素比较? 3)假定每个元素的查找概率相等,求查找成功时的平均查找长度ASL。
时间: 2024-03-27 21:35:10 浏览: 215
1)判定树如下:
```
(3,5,7,24,30,46,63,72,87)
|
(24,46,72,87)
|
(46,72,87)
|
(46)
```
2)查找元素46需要依次与30、63、46比较。
3)平均查找长度ASL = 成功查找时的ASL × 成功查找概率 + 不成功时的ASL × 不成功概率。
由于每个元素的查找概率相等,成功查找概率为1/9,不成功概率为8/9。成功查找时的ASL为3,不成功时的ASL为4。因此,ASL = 3 × 1/9 + 4 × 8/9 = 35/9。
相关问题
假定对有序表:(3,4,5,7,24,30,42,54,63,72,87,95)进行折半查找,画出描述折半查找过程的判定树。
折半查找也称为二分查找,它是一种在有序数组中查找特定元素的搜索算法。对于给定的有序序列(3,4,5,7,24,30,42,54,63,72,87,95),我们从中间开始比较,然后每次根据目标值与中间元素的关系决定是在左半部分还是右半部分继续查找。
下面是折半查找的过程,假设我们要找的目标值是 `X`:
1. 首先,我们将数组的第一个元素作为基准,即 3。
2. 如果 X 小于 3,则我们在数组的左半部分(3之前的部分)查找,因为目标值不可能大于已排序的最小值。
3. 如果 X 等于 3 或者大于 3,则我们取中间元素 5 与 X 比较,以此类推。
4. 这样一直持续到找到目标值、达到数组的边界,或者发现目标值不存在。
以下是对应的判定树表示:
```
初始
|
<X>?
/ \
/ \
3 7 (如果 X > 3)
\ /
5 >
\ /
24
\
30
\
42
\
54
\
63
\
72
\
87
\
95
```
在这个判定树中,每个分支代表一次比较,问号表示是否 `<` 目标值 `X`,根据比较结果选择左边或右边继续查找。
假定对有序表:(3,4,5,7,24,30,42,54,63,72,87,95)进行折半查找,试回答下列问题: ① 画出描述折半查找过程的判定树;
首先,让我们理解折半查找的过程,它适用于已排序的数据集合中。在这个例子中,我们有一个有序数组,初始时我们需要找到特定的元素。步骤如下:
1. 找到中间元素。数组的第一个元素是3,最后一个元素是95。由于共有12个元素,中点索引为 (12 - 1) / 2 = 5,所以第一次比较的是第6个元素(54)。
2. 比较目标值与中间值。如果目标值等于中间值(54),则查找结束。否则,根据目标值是小于还是大于中间值决定下一次查找范围。
3. 如果目标值小于54,则在左半部分(元素1到5)继续寻找。
如果目标值大于54,则在右半部分(元素6到12)继续寻找。
4. 这个过程会一直持续,直到找到目标值或者搜索范围变为零(即只有一个元素,但目标不在其中)。
为了画出描述这个过程的判定树,我们可以按照递归的方式构建:
```
中间元素(54)
/ \
小于54 大于54
/ \ / \
第一中间元素(24) 第二中间元素(63)
/ /
... ...
```
每个节点表示一次比较,分支代表目标值与当前中间值的关系。最终,我们会到达一个叶子节点,上面写着"未找到"或者找到了目标值。实际的判定树会随着每一次比较细化其分支。
阅读全文